问题的提出
将一个CSV文件转换为
- 一个字典的列表
- 一个图元的列表
- 列表的列表
让我们逐一来看看这些难题。
注意:我只向你展示每个问题的最Pythonic的解决方案--基于我的个人观点--并在适用时向你推荐更详细的教程。
用Python将CSV转换为字典列表
下面是一个CSV文件的内容,"my_file.csv"
,用于我们下面的代码片段。
Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000
如何在Python中把这个文件转换成如下的字典列表?
[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]
下面是将该 CSV 文件转换成字典列表的代码,通过使用csv.DictReader(file)
函数每行一个字典。
import csv
csv_filename = 'my_file.csv'
with open(csv_filename) as f:
reader = csv.DictReader(f)
lst = list(*reader)
字典是一个数据结构,它将键映射到值。
前面的代码片段的结果是一个字典的列表。CSV的第一行被用作头,以确定字典的键,这些键被映射到CSV文件的各个行中定义的值。
[{'Name': 'Alice', 'Job': 'Programmer', 'Age': '23', 'Income': '110000'}{'Name': 'Bob', 'Job': 'Executive', 'Age': '34', 'Income': '90000'}{'Name': 'Carl', 'Job': 'Sales', 'Age': '45', 'Income': '50000'}]
csv.DictReader(f)
方法需要一个文件对象f
作为输入参数。因此,你首先需要使用内置的Python [open()](https://blog.finxter.com/python-open-function/)
函数打开文件。
如何在Python中把一个CSV文件转换成一个列表?
给定一个CSV文件(例如,存储在文件名为'my_file.csv'
)。
INPUT: file 'my_file.csv'
挑战:如何将其转换为一个列表(=嵌套的列表),即把行的值放到内部列表中?
OUTPUT: Python list of lists
要在纯 Python 中把 CSV 读取到一个嵌套的列表中,用以下方法打开文件 [open('my_file.csv')](https://blog.finxter.com/python-open-function/)
读取所有行到一个变量中,使用 [f.readlines()](https://blog.finxter.com/how-to-read-first-n-lines-of-a-file-in-python/)
.现在,遍历所有的行,用......剥离它们的空白。 [strip()](https://blog.finxter.com/python-string-strip/)
将它们从空白处剥离,并在分隔符','
。 [split(',')](https://blog.finxter.com/python-string-split/)
.
你可以在一个简单的列表理解语句中完成这个任务,就像这样。
csv_filename = 'my_file.csv'
with open(csv_filename) as f:
lines = f.readlines()
lst = [line.strip().split(',') for line in lines]
输出结果是。
print(lst)
# [['9', '8', '7'], ['6', '5', '4'], ['3', '2', '1']]
在Python中把CSV转换为图元列表
给定一个CSV文件(例如,存储在文件名为'my_file.csv'
)。
INPUT: file 'my_file.csv'
挑战:如何将CSV文件转换为图元列表,即把行值放到内部图元中?
OUTPUT: Python list of tuples
要在 Python 中把 CSV 文件'my_file.csv'
转换为图元的列表,可以使用csv.reader(file_obj)
创建一个 CSV 文件阅读器,该阅读器持有一个列表的迭代器,每行一个。
现在,使用 list(tuple(line) for line in reader)
表达式和一个生成器表达式,将每个内部列表转换为元组。
这里有一个简单的例子,用这种方法将我们的 CSV 文件转换为一个嵌套的列表。
import csv
csv_filename = 'my_file.csv'
with open(csv_filename) as f:
reader = csv.reader(f)
lst = list(tuple(line) for line in reader)
输出结果是。
print(lst)
# [('9', '8', '7'), ('6', '5', '4'), ('3', '2', '1')]
当 深度学习算法得到的大部分积极反馈都是讽刺性的时候,就很难对它们进行训练。