Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2010 10:53:20

Olyaleo
От:
Зарегистрирован: 2010-03-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

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)



Офлайн

#2 Май 25, 2010 13:00:57

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Запись в CSV

немного не так. Тебе не нужен отдельный цикл for row in it, потому что в it уже есть то, что нужно writer.writerow, то есть столбцы. Тебе нужно только их записать, прямо в первом цикле. Дерзай, уже немного осталось.!



Офлайн

#3 Май 25, 2010 13:17:38

Olyaleo
От:
Зарегистрирован: 2010-03-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

Ed, спасибо за твою терпеливость, сейчас дерзну, посмотрим что из этого выйдет



Офлайн

#4 Май 25, 2010 13:39:22

Olyaleo
От:
Зарегистрирован: 2010-03-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

#!/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 и т.д.



Офлайн

#5 Май 25, 2010 14:46:13

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Запись в CSV

Во-первых лучше написать step большими буквами, так в Питоне принято обзывать константы.
Во-вторых нужен простенький пример того, что в какие столбцы записать. Я правильно понял, что одна строка из входного файла, разбитая на части должна стать одним столбцом выходного файла?



Офлайн

#6 Май 25, 2010 15:21:26

Olyaleo
От:
Зарегистрирован: 2010-03-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

да, все правильно, строка из входного файла, должна стать одним столбцом выходного файла, но в выходной файл потом еще нужно дозаписать три столбца result, result1, result2. Эти данные, из расчета кода, который я первоначально написала. В итоге должно получиться 4 столбца. Вот это то я не смогла сделать



Офлайн

#7 Май 25, 2010 22:11:54

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Запись в CSV

Тогда так в лоб не получится решить. Дело в том, что 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, поскольку он является строкой.

Понятно ли?



Офлайн

#8 Май 28, 2010 11:53:57

Olyaleo
От:
Зарегистрирован: 2010-03-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

Ed, немного не понятно, а есть примеры с подобной операцией?



Офлайн

#9 Май 28, 2010 23:54:13

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Запись в CSV

Можно и пример. Если я правильно понял задачу, то должно работать.

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 недели в воскресенье утром, так что торопись :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version