Найти - Пользователи
Полная версия: Запись в CSV
Начало » Python для новичков » Запись в CSV
1 2 3
Olyaleo
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)
Ed
немного не так. Тебе не нужен отдельный цикл for row in it, потому что в it уже есть то, что нужно writer.writerow, то есть столбцы. Тебе нужно только их записать, прямо в первом цикле. Дерзай, уже немного осталось.!
Olyaleo
Ed, спасибо за твою терпеливость, сейчас дерзну, посмотрим что из этого выйдет
Olyaleo
#!/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))
В результате, теперь записывает каждую последовательность из 5 букв по столбцам в одну строчку, но результат все равно пока не тот, надо чтобы в столбец. Где снова напортачила?
Результат:
abcde	bcdef	cdefg	defgf	efgfg	fgfgh	gfghf	fghfg	ghfgg	hfggg	fgggf	gggff	ggffd	gffdh	ffdhj	fdhjt и т.д.
Ed
Во-первых лучше написать step большими буквами, так в Питоне принято обзывать константы.
Во-вторых нужен простенький пример того, что в какие столбцы записать. Я правильно понял, что одна строка из входного файла, разбитая на части должна стать одним столбцом выходного файла?
Olyaleo
да, все правильно, строка из входного файла, должна стать одним столбцом выходного файла, но в выходной файл потом еще нужно дозаписать три столбца result, result1, result2. Эти данные, из расчета кода, который я первоначально написала. В итоге должно получиться 4 столбца. Вот это то я не смогла сделать
Ed
Тогда так в лоб не получится решить. Дело в том, что 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']
]
И т.д.
Таким образом после чтения всех строк мы получим список списков подстрок, каждый из которых можно тупо писать в выходной csv, поскольку он является строкой.

Понятно ли?
Olyaleo
Ed, немного не понятно, а есть примеры с подобной операцией?
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)
PS: Я в отпуск уезжаю на 2 недели в воскресенье утром, так что торопись :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB