Вопрос-Ответ

Python import csv to list [duplicate]

Python импортирует csv в список

У меня есть CSV-файл примерно с 2000 записями.

Каждая запись имеет строку и категорию для нее:

This is the first line,Line1
This is the second line,Line2
This is the third line,Line3

Мне нужно преобразовать этот файл в список, который выглядит следующим образом:

data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]

Как импортировать этот CSV в нужный мне список с помощью Python?

Переведено автоматически
Ответ 1

С помощью модуля csv:

import csv

with open('file.csv', newline='') as f:
reader = csv.reader(f)
data = list(reader)

print(data)

Вывод:

[['This is the first line', 'Line1'], ['This is the second line', 'Line2'], ['This is the third line', 'Line3']]

Если вам нужны кортежи:

import csv

with open('file.csv', newline='') as f:
reader = csv.reader(f)
data = [tuple(row) for row in reader]

print(data)

Вывод:

[('This is the first line', 'Line1'), ('This is the second line', 'Line2'), ('This is the third line', 'Line3')]

Старый ответ на Python 2, также использующий csv модуль:

import csv
with open('file.csv', 'rb') as f:
reader = csv.reader(f)
your_list = list(reader)

print your_list
# [['This is the first line', 'Line1'],
# ['This is the second line', 'Line2'],
# ['This is the third line', 'Line3']]
Ответ 2

Обновлено для Python 3:

import csv

with open('file.csv', newline='') as f:
reader = csv.reader(f)
your_list = list(reader)

print(your_list)

Вывод:

[['This is the first line', 'Line1'], ['This is the second line', 'Line2'], ['This is the third line', 'Line3']]
Ответ 3

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('filename.csv', delimiter=',')

# 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()

Одним из больших преимуществ является то, что pandas автоматически обрабатывает строки заголовка.

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

Смотрите также: Как мне читать и записывать CSV-файлы с помощью Python?

Pandas # 2

import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
dicts = df.to_dict('records')

Содержимое df является:

     country   population population_time    EUR
0 Germany 82521653.0 2016-12-01 True
1 France 66991000.0 2017-01-01 True
2 Indonesia 255461700.0 2017-01-01 False
3 Ireland 4761865.0 NaT True
4 Spain 46549045.0 2017-06-01 True
5 Vatican NaN NaT True

Содержимое dicts является

[{'country': 'Germany', 'population': 82521653.0, 'population_time': Timestamp('2016-12-01 00:00:00'), 'EUR': True},
{'country': 'France', 'population': 66991000.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': True},
{'country': 'Indonesia', 'population': 255461700.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': False},
{'country': 'Ireland', 'population': 4761865.0, 'population_time': NaT, 'EUR': True},
{'country': 'Spain', 'population': 46549045.0, 'population_time': Timestamp('2017-06-01 00:00:00'), 'EUR': True},
{'country': 'Vatican', 'population': nan, 'population_time': NaT, 'EUR': True}]

Pandas # 3

import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
lists = [[row[col] for col in df.columns] for row in df.to_dict('records')]

Содержимое lists является:

[['Germany', 82521653.0, Timestamp('2016-12-01 00:00:00'), True],
['France', 66991000.0, Timestamp('2017-01-01 00:00:00'), True],
['Indonesia', 255461700.0, Timestamp('2017-01-01 00:00:00'), False],
['Ireland', 4761865.0, NaT, True],
['Spain', 46549045.0, Timestamp('2017-06-01 00:00:00'), True],
['Vatican', nan, NaT, True]]
Ответ 4

Обновление для Python3:

import csv
from pprint import pprint

with open('text.csv', newline='') as file:
reader = csv.reader(file)
res = list(map(tuple, reader))

pprint(res)

Вывод:

[('This is the first line', ' Line1'),
('This is the second line', ' Line2'),
('This is the third line', ' Line3')]

Если csvfile является файловым объектом, его следует открывать с помощью newline=''.

модуль csv

python csv