在Python中将csv导入为列表

4

我正在尝试将一个csv文件导入为列表:

file = open('curr.csv', 'rt')
f = file.read()
f = f.split(',')

print(f)

CSV文件中仅有'GBP, USD',因此我想要得到列表['GBP', 'USD']。不过我实际得到的结果是:
['GBP', 'USD\n']

如何避免在最后一个值上出现 \n?


使用csv模块。 - user1907906
1个回答

2

你需要剥离你的行,但是作为一种Pythonic方式,你可以使用csv模块来处理csv文件:

>>> import csv
>>> with open('curr.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=',')
...     print list(spamreader)

请注意,如果您只想要一个列表中的第一行,则此操作将返回您的 csv 文件行的嵌套列表。您可以使用 reader 对象的 next() 方法来获取列表中的第一行:
>>> import csv
>>> with open('curr.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=',')
...     print spamreader.next() 

如果你想要列表中的所有行,可以使用嵌套的列表推导式:

>>> import csv
>>> with open('curr.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=',')
...     print [j for i in spamreader for j in i]

一个有效的答案,但对于这样一个简单的文件来说似乎有点过度。 - TheBlackCat
2
@TheBlackCat 这是处理 csv 文件的正确方式。请注意,我们在这里不仅仅是为 OP 提供临时解决方案! - Mazdak
我同意Kasra的观点。围绕字符串进行分割也不会比三行代码更短,而且更加脆弱。 - wonderb0lt
1
@Kasra 根据情况,处理 csv 文件有各种“正确的方法”。在这种情况下,使用 csv 模块会增加处理多行的复杂性。例如,你的答案给出了 [['GBP', ' USD']],这不是问题所要求的。因此,在这种情况下,使用更简单的方法可以避免一些混淆。 - TheBlackCat
@TheBlackCat 是的,我注意到了。我会编辑答案!感谢您的关注! - Mazdak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接