(Python читает CSV) Имеет ли значение писать такой или подобный код?

from csv import reader
nfl = list(reader(open("nfl.csv")))

или вот так:

import csv
f = open("my_data.csv")
csvreader = csv.reader(f)
my_data = list(csvreader)

Имеет ли значение, если я напишу код первым способом? Он такой же быстрый, как второй? Как это пишется в реальной корпоративной жизни?

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

roganjosh 24.08.2018 11:31

документация дает примеры правильного чтения файлов CSV.

roganjosh 24.08.2018 11:33

@AkshayNevrekar, это особенно тяжелая зависимость для чтения файлов CSV, если OP еще не имеет pandas для какой-либо другой цели

roganjosh 24.08.2018 11:35

@roganjosh Итак, я могу повторить, если мне не нужны все данные? Но что будет, если файл останется открытым? Есть ли риск, что он может быть случайно отредактирован кем-то извне? Или просто кушает память ПК?

HardRock4Life 24.08.2018 11:43

Я не уверен, что понимаю вопрос. Вы говорите о параллельном доступе к файлу?

roganjosh 24.08.2018 11:49

@roganjosh Верно, это возможно?

HardRock4Life 24.08.2018 11:50

Есть ответ здесь о параллелизме и здесь о закрытии файлов

roganjosh 24.08.2018 11:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ни один из методов не идеален, потому что вы хотите, чтобы файл был закрыт в конце. Для этой цели вы можете использовать with, чтобы убедиться, что файл закрыт после того, как вы закончите его обработку. Это позволяет избежать ошибок, при которых вы могли бы забыть вызвать .close() для файла. Более подробную информацию о менеджерах контекста можно найти в здесь. Примеры этого можно увидеть в документация.

Итак, что-то вроде:

with open('my_data.csv') as infile:
    reader = csv.reader(infile)
    data = list(reader)

Обратите внимание, однако, что при этом в память загружается все содержимое файла. Как показывают примеры документации, вы можете вместо этого перебирать объект reader, если вам не нужен весь файл в памяти.

Другие вопросы по теме