Как читать и писать CSV файлы с помощью Python?

У меня есть файл example.csv с содержимым

1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3

Как мне прочитать этот example.csv с Python?

Аналогично, если у меня есть

data = [(1, "A towel,", 1.0),
        (42, " it says, ", 2.0),
        (1337, "is about the most ", -1),
        (0, "massively useful thing ", 123),
        (-2, "an interstellar hitchhiker can have.", 3)]

Как написать data в CSV файл с Python?

Ответ 1

Ниже приведены некоторые минимальные полные примеры того, как читать файлы CSV и как писать файлы CSV с помощью Python.

Python 2 + 3: Чтение CSV файла

Pure Python

# -*- coding: utf-8 -*-
import csv

# Define data
data = [(1, "A towel,", 1.0),
        (42, " it says, ", 2.0),
        (1337, "is about the most ", -1),
        (0, "massively useful thing ", 123),
        (-2, "an interstellar hitchhiker can have.", 3)]

# Write CSV file
with open('test.csv', 'w') as fp:
    writer = csv.writer(fp, delimiter=',')
    # writer.writerow(["your", "header", "foo"])  # write header
    writer.writerows(data)

# Read CSV file
with open('test.csv', 'r') as fp:
    reader = csv.reader(fp, delimiter=',', quotechar='"')
    # next(reader, None)  # skip the headers
    data_read = [row for row in reader]

print(data_read)

После этого содержимое data_read равно

[['1', 'A towel,', '1.0'],
 ['42', ' it says, ', '2.0'],
 ['1337', 'is about the most ', '-1'],
 ['0', 'massively useful thing ', '123'],
 ['-2', 'an interstellar hitchhiker can have.', '3']]

Юникод и Python 2.X

Если вы хотите написать Юникод, вам нужно установить unicodecsv. Do не открыть файл с помощью codecs.open, а просто с помощью open. Напишите его с помощью

import unicodecsv as csv
# Write CSV file
with open('test.csv', 'w') as fp:
    writer = csv.writer(fp, encoding='utf-8')
    # writer.writerow(["your", "header", "foo"])  # write header
    writer.writerows(data)

Похожие

Pandas

import pandas as pd

# Read the CSV into a pandas data frame (df)
#   With a df you can do many things
#   most important: visualize data with Seaborn
df = pd.read_csv('myfile.csv', sep=',')
print(df)

# Or export it in many ways, e.g. a list of tuples
tuples = [tuple(x) for x in df.values]

# or export it as a list of dicts
dicts = df.to_dict().values()

Подробнее см. read_csv docs. Обратите внимание, что pandas автоматически появляется, если есть строка заголовка, но вы также можете установить ее вручную.

Если вы не слышали о Seaborn, я рекомендую посмотреть на него.

Другие

Чтение CSV файлов поддерживается рядом других библиотек, например:

Созданный файл CSV

1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3

Общие окончания файла

.csv

Работа с данными

После чтения файла CSV в список кортежей /dicts или pandas dataframe он просто работает с такими данными. Ничего особенного в CSV.

Альтернативы

Для вашего приложения может быть важно следующее:

  • Поддержка другими языками программирования
  • Производительность чтения/записи
  • Компактность (размер файла)

См. также: Сравнение форматов сериализации данных

Если вы скорее ищете способ создания файлов конфигурации, вы можете прочитать мою короткую статью Конфигурационные файлы в Python

Ответ 2

Запись файла CSV

Сначала вам нужно импортировать csv

Например,

import csv

with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

Ответ 3

import csv
with open(fileLocation+'example.csv',newline='') as File: #the csv file is stored in a File object

    reader=csv.reader(File)       #csv.reader is used to read a file
    for row in reader:
        print(row)