Python - 将CSV转换为列表的列表方法

1,932 阅读3分钟

问题的提出

Python - Convert CSV to List of Lists

给定一个CSV文件(例如,存储在文件名为'my_file.csv' )。

INPUT: file 'my_file.csv'

挑战:如何将其转换为一个列表(=嵌套列表),即把行的值放入内部列表

OUTPUT: Python list of lists

方法1:csv.reader()

方法1:csv.reader()

要在 Python 中把一个 CSV 文件'my_file.csv' 转换为一个列表,请使用csv.reader(file_obj) 方法创建一个 CSV 文件阅读器。然后使用构造函数将生成的对象转换为一个列表。 [list()](https://blog.finxter.com/python-list/)构造函数将得到的对象转换成列表。

下面是一个简单的例子,用这种方法将我们的CSV文件转换为一个嵌套列表。

import csv


csv_filename = 'my_file.csv'

with open(csv_filename) as f:
    reader = csv.reader(f)
    lst = list(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/)函数,并使用 [list()](https://blog.finxter.com/python-list/)的内置函数将 CSV 阅读器对象转换成列表。

下面是它的外观。

import csv; lst=list(csv.reader(open('my_file.csv'))); print(lst)

简洁,不是吗?🙂

输出是一样的。

[['9', '8', '7'], ['6', '5', '4'], ['3', '2', '1']]

顺便说一下。你是否需要将所有内部元素转换为某种数据类型,如整数?

如果是的话,在前面方法得到的字符串嵌套列表lst 上使用下面的方法。

new_lst = [[int(x) for x in inner] for inner in lst]

转换后的new_lst ,现在包含一个嵌套的ints列表。

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列表。

import pandas as pd

df = pd.read_csv('my_file.csv', header=None)
lst = df.values.tolist()

print(lst)
# [[9, 8, 7], [6, 5, 4], [3, 2, 1]]

这很容易,不是吗?🙂

当然,你也可以通过像这样的命令链来单行化。

lst = 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/).现在,遍历所有的行,用以下方法将它们从空白处剥离出来 [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)