Форум сайта python.su
0
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)
Офлайн
13
немного не так. Тебе не нужен отдельный цикл for row in it, потому что в it уже есть то, что нужно writer.writerow, то есть столбцы. Тебе нужно только их записать, прямо в первом цикле. Дерзай, уже немного осталось.!
Офлайн
0
Ed, спасибо за твою терпеливость, сейчас дерзну, посмотрим что из этого выйдет
Офлайн
0
#!/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 и т.д.
Офлайн
13
Во-первых лучше написать step большими буквами, так в Питоне принято обзывать константы.
Во-вторых нужен простенький пример того, что в какие столбцы записать. Я правильно понял, что одна строка из входного файла, разбитая на части должна стать одним столбцом выходного файла?
Офлайн
0
да, все правильно, строка из входного файла, должна стать одним столбцом выходного файла, но в выходной файл потом еще нужно дозаписать три столбца result, result1, result2. Эти данные, из расчета кода, который я первоначально написала. В итоге должно получиться 4 столбца. Вот это то я не смогла сделать
Офлайн
13
Тогда так в лоб не получится решить. Дело в том, что 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']
]
Офлайн
0
Ed, немного не понятно, а есть примеры с подобной операцией?
Офлайн
13
Можно и пример. Если я правильно понял задачу, то должно работать.
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)
Офлайн