
问题的提出
给定一个CSV文件(例如,存储在文件名为'my_file.csv' )。
INPUT: file 'my_file.csv'
挑战:如何将CSV文件转换为图元列表,即把行值放入内部图元?
OUTPUT: Python list of tuples
方法1:csv.reader()

方法1:csv.reader()
要在 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')]
方法2:单行线

方法2:单行线
你也可以使用下面的Python 单线程思想将 CSV 转换为一个图元列表。
用以下方法打开文件 [open()](https://blog.finxter.com/python-open-function/)打开文件,将文件对象传入 [csv.reader()](https://blog.finxter.com/how-to-read-a-csv-file-into-a-python-list/),并使用 Python 中的内置函数将 CSV 阅读器对象转换为一个列表。 [list()](https://blog.finxter.com/python-list/)内置函数将 CSV 阅读器对象转换为一个列表,并使用生成器表达式将每个内部列表转换为一个元组。
下面是它的样子。
import csv; lst=list(tuple(line) for line in csv.reader(open('my_file.csv'))); print(lst)
简洁,不是吗?
输出结果是一样的。
[('9', '8', '7'), ('6', '5', '4'), ('3', '2', '1')]
顺便说一下。你是否需要将所有内部元素转换为某种数据类型,如整数?
如果是这样,请在之前显示的列表lst 上使用下面的方法。
new_lst = [tuple(int(x) for x in inner) for inner in lst]
转换后的new_lst ,现在包含了一个ints的tuples列表。
print(new_lst)
# [('9', '8', '7'), ('6', '5', '4'), ('3', '2', '1')]
方法3:潘达

方法3:潘达
你可以用Pandas将CSV转换为图元列表,首先使用pd.read_csv('my_file.csv', header=None) 函数读取不含头行的 CSV,然后使用以下函数将得到的DataFrame转换为嵌套列表 [df.values.tolist()](https://blog.finxter.com/dataframe-to-a-list-and-vice-versa/).第三,将嵌套的列表转换为图元的列表,你就完成了。
这里有一个例子,将CSV转换为Pandas DataFrame,然后转换为嵌套的原始Python列表,再转换为tuples列表。
import pandas as pd
# CSV to DataFrame
df = pd.read_csv('my_file.csv', header=None)
# DataFrame to List of Lists
lst = df.values.tolist()
# List of Lists to List of Tuples:
new_lst = [tuple(x) for x in lst]
print(new_lst)
# [(9, 8, 7), (6, 5, 4), (3, 2, 1)]
这很容易,不是吗?
当然,你也可以通过像这样的命令链来单行化。
# One-Liner to convert CSV to list of tuples:
lst = [tuple(x) for x in pd.read_csv('my_file.csv', header=None).values.tolist()]
方法 4:原始 Python 无依赖性

方法 4:无依赖的原始Python
如果你像我一样,如果不需要的话,你会尽量避免使用依赖关系。无论如何,Raw Python 往往更有效率,而且足够简单。同时,你也不会让自己面临不必要的风险和复杂的问题。
问题。那么,有没有一种简单的方法可以在没有外部依赖的情况下,在原始 Python 中将 CSV 读取为图元列表?
当然有!
要在纯 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/).遍历所有的行,用.NET将它们从空白处剥离。 [strip()](https://blog.finxter.com/python-string-strip/)遍历所有的行,用 "删除空白",在分隔符上分割它们,',' 。 [split(',')](https://blog.finxter.com/python-string-split/)并将所有内容传入 [tuple()](https://blog.finxter.com/python-tuple/)函数中。
你可以在一个简单的列表理解语句中完成这个任务,像这样。
csv_filename = 'my_file.csv'
with open(csv_filename) as f:
lines = f.readlines()
lst = [tuple(line.strip().split(',')) for line in lines]
print(lst)