用Python将CSV转换为图元列表的方法

484 阅读3分钟

Convert CSV to List of Tuples in Python

问题的提出

给定一个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)