映射在python中的csv

时间:2011-02-16 23:15:43

标签: python csv lambda map

我正在尝试在python中的csv文件上使用“map”。

但是,map(lambda x: x, reseller_csv)行没有任何内容。

我试过迭代csv对象,它工作正常,可以打印行。

这是代码。

# imports
import csv

# Opens files
ifile = open('C:\Users\josh.SCL\Desktop\Records.csv', 'r')
ofile = open('C:\Users\josh.SCL\Desktop\RecordsNew.csv', 'w')
resellers_file = open('C:\Users\josh.SCL\Desktop\Reseller.csv', 'r')


# Setup CSV objects
csvfile = csv.DictReader(ifile, delimiter=',')
reseller_csv = csv.DictReader(resellers_file, delimiter=',')

# Get names only in resellers
resellers = map(lambda x: x.get('Reseller'), reseller_csv)

3 个答案:

答案 0 :(得分:4)

csv.DictReader是一次性使用小工具。你可能第二次跑了。

>>> import csv
>>> iterable = ['Reseller,cost', 'fred,100', 'joe,99']
>>> reseller_csv = csv.DictReader(iterable)
>>> map(lambda x: x.get('Reseller'), reseller_csv)
['fred', 'joe']
>>> map(lambda x: x.get('Reseller'), reseller_csv)
[]
>>>

我们在这里时:

(1)[Python 2.x]始终以 BINARY 模式打开csv文件。
[Python 3.x]始终以文本模式(默认)打开csv文件,并使用newline=''

(2)如果您坚持在Windows中硬编码文件路径,请使用r“....”而不是“...”,或使用正斜杠 - 否则\n\t将被解释为控制字符。

答案 1 :(得分:0)

以下适用于我:

>>> data = ["name,age", "john,32", "bob,45"]
>>> list(map(lambda x: x.get("name"), csv.DictReader(data))) # Python 3 so using list to see values.
['john', 'bob']

您确定从DictReader获得了任何数据吗?你之前是否读过它的任何数据,或许会让读者筋疲力尽?

答案 2 :(得分:0)

首先关注您的具体问题:尝试检查是否确实存在名为“经销商”的密钥,可能会有不同的大小写或额外空间。查看所有键的列表(假设未耗尽的DictReader):

>>> csvfile.next().keys()

否则map()应该可以正常工作。但我认为这样做更具可读性(也更快!):

resellers = [x['Reseller'] for x in reseller_csv]