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

时间:2015-12-14 00:14:54

标签: python csv

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

csv.reader(filename)

返回一个列表。

所以我写了下面的代码:

import csv
my_file = open(file_name.csv, mode='r')
parsed_data = csv.reader(my_file)
print(parsed_data)

它打印的是什么

<_csv.reader object at 0x0000000002838118>

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

[value1, value2, value3]

2 个答案:

答案 0 :(得分:11)

你得到的是一个iterable,即一个会给你一系列其他对象的对象(在这种情况下是字符串)。您可以将其传递给[AWS S3 403 0.188842 1 retries] put_object(:acl=>:public_read,:bucket_name=>"<bucket-name>",:content_length=>87882,:content_type=>"image/jpeg",:data=>Paperclip::UploadedFileAdapter: profile_picture_square.jpg,:key=>"assets/users/1/original.jpg") AWS::S3::Errors::InvalidAccessKeyId The AWS Access Key Id you provided does not exist in our records. 循环,或使用<bucket-name>获取实际列表:

for

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

答案 1 :(得分:4)

csv.reader的返回值是迭代器(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