Python的csv.reader(filename)真的会返回一个列表吗?似乎不是这样

Sin*_*dyr 4 python csv

所以我还在学习Python,我正在学习如何阅读文件,csv文件.我刚看过的课程告诉我使用

csv.reader(filename)
Run Code Online (Sandbox Code Playgroud)

返回一个列表.

所以我写了下面的代码:

import csv
my_file = open(file_name.csv, mode='r')
parsed_data = csv.reader(my_file)
print(parsed_data)
Run Code Online (Sandbox Code Playgroud)

它打印的是什么

<_csv.reader object at 0x0000000002838118>
Run Code Online (Sandbox Code Playgroud)

如果它输出的是一个列表,我不应该得到一个列表,即这样的东西?

[value1, value2, value3]
Run Code Online (Sandbox Code Playgroud)

Aas*_*set 11

你得到的是一个可迭代的,即一个会给你一系列其他对象的对象(在本例中是字符串).您可以将其传递给for循环,或用于list()获取实际列表:

parsed_data = list(csv.reader(my_file))
Run Code Online (Sandbox Code Playgroud)

它以这种方式设计的原因是,它允许您处理大于计算机上的内存量的文件(或者只是大到足以在您加载所有内存时消耗不便的内存量的文件将其内容列入清单).使用可迭代,您可以选择一次查看一个元素,例如在读取下一个元素之前再次将其丢弃.


fal*_*tru 5

的返回值csv.reader是一个迭代器(读取器对象)。

您需要迭代它才能获取列表:

import csv
my_file = open(file_name.csv, mode='r')
parsed_data = csv.reader(my_file)
for row in parsed_data:
    print(row)   # <--- a list of strings
Run Code Online (Sandbox Code Playgroud)

  • @AasmundEldhuset,“row”是一个字符串列表。根据 [`csv.reader` 文档](https://docs.python.org/3/library/csv.html#csv.reader): *从 csv 文件读取的每一行都作为字符串列表返回。 * (3认同)