Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2010 15:10:29

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

Запись в CSV

очень хорошо. Отломалось у вас в строке 7, судя по трэйсбэку. Отломалось потому, что в вашем входном потоке внутри поля, не включенного в кавычки обнаружился символ начала строки.
Рекомендации будут такие:
1. Убрать код, пишущий в Output1, чтобы не смущал. Задание было пока только прочитать файл.
2. Вывести lines внутри цикла. Если падает не на первой строке, то можно будет увидеть результат чтения.
3. Показать здесь строку, на которой падает.

PS: название переменной lines не соответствует реальности. Мы читаем по одной строке, а lines означает ‘строки’.



Отредактировано (Май 18, 2010 15:11:32)

Офлайн

#2 Май 18, 2010 18:39:11

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись в CSV

Ed
2. Вывести lines внутри цикла. Если падает не на первой строке, то можно будет увидеть результат чтения.
Он ведь пишет что
Olyaleo
new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
Файл не так открыт?



Офлайн

#3 Май 20, 2010 11:44:24

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

Запись в CSV

Во-первых, меня можно и на ты. Во-вторых, после этой ошибки у меня полетел комп, даже он бедненький не выдержал моего, мягко сказать недопонимания в программирование. Мои данные, все таки удалось восстановить, которые были потеряны. И я продолжила мучения свои и компа. Этой ошибки теперь нет, зато появилась другая, ошибка - попытка применить операцию к объекту не того типа, как исправить?:

File "2.py", line 10, in <module>
for i in xrange((line)-step))
TypeError: unsupported operand type(s) for -: 'list' and 'int'
сам код
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv

data = csv.reader(open('Input.csv', 'r'), delimiter=',', quotechar='|')
for line in data:
step = 28
it = (line[i:i+step]
for i in xrange((line)-step))
print it



Отредактировано (Май 20, 2010 11:46:42)

Офлайн

#4 Май 20, 2010 15:24:08

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

Запись в CSV

Ты усложняешь задачу. Нужно пока тупо прочитать попытаться. Вот так:

import csv

data = csv.reader(open('Input.csv', 'r'), delimiter=',', quotechar='|')
for line in data:
print line
Остальное пока не нужно. Добавим, когда это хотя бы заработает.



Отредактировано (Май 20, 2010 15:24:23)

Офлайн

#5 Май 21, 2010 05:14:20

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

Запись в CSV

Ed, сделала, как вы сказали. Код работает, файл читает:

[olga ~/python_file/generator]-% python 2.py
['abcdefghijklmnopqrstuvwxyzhdfjkdhfreiufrejkhgjsdgfksfgkljetrhtruihtkjhgosigjlkdhrskjdge']
какие дальнейшие шаги?



Отредактировано (Май 21, 2010 07:18:02)

Офлайн

#6 Май 21, 2010 10:07:24

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

Запись в CSV

Меня тоже можно на ты.
Что-то вывод не выглядит, как csv. Там что, один столбец? Если это не csv, то почему расширение у файла .csv и зачем мы его читаем csv.reader-ом?



Офлайн

#7 Май 24, 2010 09:30:37

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

Запись в CSV

в файле, изначально, один столбец, даже одна строчка с цепочкой букв, но после генерации с буквами, результаты хочу записать в исходный файл в csv, в отдельные столбцы
а зачем мы его начали читать csv.reader-ом, просто были советы с твоей стороны так сделать, вот я и изменила свой код



Офлайн

#8 Май 24, 2010 11:10:22

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

Запись в CSV

Если это так, то нет смысла читать его csv. Читаем так:

data = open('Input.csv', 'r')
for line in data:
print line
А вот писать нужно с помощью csv.writer.
Перед чтением нужно расделить строку, считанную из файла на части. Давай для начала просто прочитаем строку, разделим ее и выведем. Запись добавим потом.
Судя по всему это разделение было сделано так:
step = 28
it = (line[i:i+step] for i in xrange((line)-step))
То есть исходная строка разбивалась на части по 28 символов.
Если ты сделаешь все правильно, то результатом будет вывод списков строк по 28 символов длиной. Останется только записать их в .csv, но это уже следующий шаг.



Офлайн

#9 Май 24, 2010 13:03:26

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

Запись в CSV

Ed, код у меня рабочий. Вот только исходная строка у меня разбивается по 28 символов с шагом +1.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv
data = open('Input.csv', 'r')
for string in data.readlines():
step = 28
it = (string[i:i+step] for i in xrange(len(string)-step))
for row in it:
print row
А вот результат, который я хочу занести в таблицу Input.csv, к примеру, во 2-ой столбец , т.е. обновить не стирая данные (буквенный набор)
[olga ~/python_file/generator]-% python 4.py
abcdefghijklmnopqrstuvwxyzhd
bcdefghijklmnopqrstuvwxyzhdf
cdefghijklmnopqrstuvwxyzhdfj
defghijklmnopqrstuvwxyzhdfjk
efghijklmnopqrstuvwxyzhdfjkd
......................................
kljetrhtruihtkjhgosigjlkdhrs
ljetrhtruihtkjhgosigjlkdhrsk
jetrhtruihtkjhgosigjlkdhrskj
etrhtruihtkjhgosigjlkdhrskjd
trhtruihtkjhgosigjlkdhrskjdg
Результат сократила, показала комбинацию первых и последних 5 последовательностей, из них видно, что код работает правильно



Отредактировано (Май 24, 2010 13:05:34)

Офлайн

#10 Май 24, 2010 13:13:03

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

Запись в CSV

Во-первых readlines в данном случае не нужен, а в случае больших файлов еще и вреден, поскольку читает весь файл.
Я же показал как читать, просто возьми и попользуй. Во-вторых step - это у нас константа, поэтому лучше сделать ее глобальной и поместить в начало файла: STEP=28.
Остальное хорошо. Теперь следующий этап - заменить цикл вывода на использование csv.writer. Дерзай!

Подсказка: Выходной файл .csv нужно открыть до начала нашего цикла чтения. Для записи одной строки в csv использовать метод writerow.



Отредактировано (Май 24, 2010 13:15:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version