Почему Python не может пропустить первую строку в CSV, когда есть новые строки? - PullRequest
0 голосов
/ 23 сентября 2019

Я читаю CSV-файл с Python.Я пропускаю первый ряд, который является просто описательными метаданными.Вот что я делаю:

f = open(in_file)
#skip the first row
next(f)
#...some data processing

Это прекрасно работает, но когда первая строка содержит ячейку с символом новой строки (например:

some random cell
with a new line

next(f)Команда возвращает все ячейки до этой ячейки, включая эту ячейку, но заканчивается на some random cell \n 'и не удаляет дальнейшие ячейки в этой первой строке. Почему это происходит и как я могу гарантировать, что вся первая строка будет удалена независимо от новой строкисимволы в клетках?

1 Ответ

1 голос
/ 24 сентября 2019

Вы сталкиваетесь с очень простой и общей проблемой (поэтому, я думаю, именно поэтому вас понизили): в современных операционных системах файлы не печатаются: их содержимое представляет собой просто последовательность байтов, а их значениебайт задается приложениями (двоичный и текстовый текст в Windows по-прежнему является различием).Это важнейшее и основное свойство операционной системы маскируется приложением Desktop (Windows, Gnome, KDE, Finder, ...): я нажимаю файл «.csv», на рабочем столе открывается Calc (или Excel), я нажимаюна файл ".exe", и Windows запускает программу, но это просто условно.На уровне ОС содержимое файла - это всего лишь байты, не более того.Для этого есть очень веская причина: напечатанные файлы на уровне ОС помогут вам за одну неделю, и вам придется бороться с этим всю оставшуюся жизнь.

Вернемся к вашему вопросу: Python выиграл 'Я не могу решить, что ваш файл "xyz.csv" должен быть открыт с особой тщательностью.Он открывает файл и позволяет вам читать его как байты или символы, и вы должны обрабатывать содержимое самостоятельно.К счастью, Python поставляется с «батарейками внутри» и предоставляет модуль csv для упаковки файла:

import csv

with open(path, 'r', encoding='...') as f: # set the encoding ofthe file, e.g. utf-8
    reader = csv.reader(f) # you may set the delimiter, quote char, etc.
    for row in reader:
        ... # do what you want with each row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...