Форум сайта python.su
Ed, я поняла замечания, исправила. Ну вот все равно никак не пойму, как сохранить, полученные данные в файле, в котором считываются исходные данные. Я попробовола использовать метод writerow, но теперь данные сохраняются таким образом, что каждая буква комбинации записывается в отдельный столбец, а надо чтобы в один. Подправленный и дополненный код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import sys
step=5
result = open('Output.csv', 'w')
data = open('Input.csv', 'r')
for string in data:
it = (string[i:i+step] for i in xrange(len(string)-step))
writer=csv.writer(result, dialect='excel')
for row in it:
writer.writerow(row)
Офлайн
немного не так. Тебе не нужен отдельный цикл for row in it, потому что в it уже есть то, что нужно writer.writerow, то есть столбцы. Тебе нужно только их записать, прямо в первом цикле. Дерзай, уже немного осталось.!
Офлайн
Ed, спасибо за твою терпеливость, сейчас дерзну, посмотрим что из этого выйдет
Офлайн
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import sys
step=5
result = open('Output.csv', 'w')
table=csv.writer(result, dialect='excel')
data = open('Input.csv', 'r')
for string in data:
it = (string[i:i+step] for i in xrange(len(string)-step))
table.writerow(list(it))
abcde bcdef cdefg defgf efgfg fgfgh gfghf fghfg ghfgg hfggg fgggf gggff ggffd gffdh ffdhj fdhjt и т.д.
Офлайн
Во-первых лучше написать step большими буквами, так в Питоне принято обзывать константы.
Во-вторых нужен простенький пример того, что в какие столбцы записать. Я правильно понял, что одна строка из входного файла, разбитая на части должна стать одним столбцом выходного файла?
Офлайн
да, все правильно, строка из входного файла, должна стать одним столбцом выходного файла, но в выходной файл потом еще нужно дозаписать три столбца result, result1, result2. Эти данные, из расчета кода, который я первоначально написала. В итоге должно получиться 4 столбца. Вот это то я не смогла сделать
Офлайн
Тогда так в лоб не получится решить. Дело в том, что csv.writer умеет писать только строки. поэтому нужно будет их сформировать. А сформировать их можно, только прочитав исходный файл целиком, поскольку последняя строка входного файла будет у нас последним столбцом выходного, если я правильно понял. То есть пока все не прочитаем не сумеем записать ничего, поскольку не будет ни одной полной строки.
Значит делаем так. Вместо записи в выходной файл в цикле чтения нужно сформировать список списков, в который писать то, что мы прочитали в виде столбцов.
Для пущей понятности вот иллюстрация:
Вначале наш результат пустой.
Допустим мы прочитали из файла строку и разбили ее на 4 подстроки.
Добавить в результат нужно таким образом, чтобы получилось вот это:
[['подстрока1.1'],
['подстрока1.2'],
[ 'подстрока1.3'],
['подстрока1.4']
]
[['подстрока1.1', 'подстрока2.1'],
['подстрока1.2', 'подстрока2.2'],
[ 'подстрока1.3', 'подстрока2.3'],
['подстрока1.4', 'подстрока2.4']
]
Офлайн
Ed, немного не понятно, а есть примеры с подобной операцией?
Офлайн
Можно и пример. Если я правильно понял задачу, то должно работать.
import csv
STEP = 5
rows = []
for line in open('Input.csv', 'r'):
line = line.strip()
if line:
for i in xrange(len(line)/STEP):
if i >= len(rows):
rows.append([])
rows[i].append(line[i*STEP:i*STEP+STEP])
if rows:
csv.writer(open('Output.csv', 'w'), dialect='excel').writerows(rows)
Офлайн