Почему Python 2.7.3 считает, что мой документ.csv находится в одной строке?
Я новичок в программировании, и я столкнулся с проблемой в некоторых моих курсовых работах, которую я не могу понять. Рассмотрим воображаемый файл с именем example.csv со следующим содержимым.
Key1,Value1
Key2,Value2
Key3,Value3
...
Если я запускаю следующий код, он печатает каждую строку в файле, за которой следует одна звездочка в последней строке. Я ожидал, что он напечатает каждую строку, разделенную звездочкой.
infile = open("example.csv", "r")
for line in infile:
print line.strip()
print '*'
#row_elements = line.split(",")
#print row_elements
Кроме того, если я попытаюсь разбить строку на каждую запятую, удалив хэши в приведенном выше коде, я получу следующий вывод.
['Key1', 'Value1\rKey2', 'Value2\rKey3'...
Вместо этого, передавая "\r" методу.split(), вывод немного улучшается.
['Key1,Value1', 'Key2,Value2'...
Я до сих пор не понимаю, почему Python думает, что весь файл в первую очередь находится на одной строке. У кого-нибудь есть понимание этого?
3 ответа
Ваш файл использует \r
в качестве разделителей строк (также называемых соглашением о новой строке "CR" или "Classic Mac"). Питона open
не имеет дело с этим по умолчанию.
Вы можете использовать режим "универсальных новых строк" ('rU'
режим в open
), чтобы открыть файл правильно.
(Обратите внимание, что некоторые текстовые редакторы Mac по-прежнему используют \r
как терминатор линии, хотя, к счастью, сейчас они встречаются гораздо реже, чем несколько лет назад.)
Ваш входной файл плохо отформатирован. В Linux строки разделяются '\n'
, В Windows строки разделяются '\r\n'
, но код в библиотеке времени выполнения делает '\r'
исчезают.
В вашем файле строки разделены '\r'
, что не является стандартом ни в одной современной операционной системе. Возможно, программа, которая создала файл, имеет некоторые недостатки.
Если вы имеете дело с CSV, вы должны использовать csv
Модуль, он заботится о большей части дерьма, связанного с обработкой CSV ввода / вывода.
import csv
with open("example.csv", "rb") as infile:
reader = csv.reader(infile)
for row in reader:
print row # a list of items in your file
with
Слушание операторов автоматически закроет файл для вас, когда вы выйдете из блока операторов.