我正在尝试在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)
答案 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]