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

PS: название переменной lines не соответствует реальности. Мы читаем по одной строке, а lines означает ‘строки’.
UsCr
Ed
2. Вывести lines внутри цикла. Если падает не на первой строке, то можно будет увидеть результат чтения.
Он ведь пишет что
Olyaleo
new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
Файл не так открыт?
Olyaleo
Во-первых, меня можно и на ты. Во-вторых, после этой ошибки у меня полетел комп, даже он бедненький не выдержал моего, мягко сказать недопонимания в программирование. Мои данные, все таки удалось восстановить, которые были потеряны. И я продолжила мучения свои и компа. Этой ошибки теперь нет, зато появилась другая, ошибка - попытка применить операцию к объекту не того типа, как исправить?:
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
Ed
Ты усложняешь задачу. Нужно пока тупо прочитать попытаться. Вот так:
import csv

data = csv.reader(open('Input.csv', 'r'), delimiter=',', quotechar='|')
for line in data:
print line
Остальное пока не нужно. Добавим, когда это хотя бы заработает.
Olyaleo
Ed, сделала, как вы сказали. Код работает, файл читает:
[olga ~/python_file/generator]-% python 2.py
['abcdefghijklmnopqrstuvwxyzhdfjkdhfreiufrejkhgjsdgfksfgkljetrhtruihtkjhgosigjlkdhrskjdge']
какие дальнейшие шаги?
Ed
Меня тоже можно на ты.
Что-то вывод не выглядит, как csv. Там что, один столбец? Если это не csv, то почему расширение у файла .csv и зачем мы его читаем csv.reader-ом?
Olyaleo
в файле, изначально, один столбец, даже одна строчка с цепочкой букв, но после генерации с буквами, результаты хочу записать в исходный файл в csv, в отдельные столбцы
а зачем мы его начали читать csv.reader-ом, просто были советы с твоей стороны так сделать, вот я и изменила свой код
Ed
Если это так, то нет смысла читать его 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, но это уже следующий шаг.
Olyaleo
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 последовательностей, из них видно, что код работает правильно
Ed
Во-первых readlines в данном случае не нужен, а в случае больших файлов еще и вреден, поскольку читает весь файл.
Я же показал как читать, просто возьми и попользуй. Во-вторых step - это у нас константа, поэтому лучше сделать ее глобальной и поместить в начало файла: STEP=28.
Остальное хорошо. Теперь следующий этап - заменить цикл вывода на использование csv.writer. Дерзай!

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