【问题标题】:Map over csv in python在python中映射csv
【发布时间】:2011-02-16 23:15:43
【问题描述】:

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

【问题讨论】:

  • 可能想展示您的代码,了解您如何创建 reseller_csv,即使我认为它是来自 csv 模块的某种 csv 阅读器对象

标签: python csv lambda map


【解决方案1】:

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 将被解释为控制字符。

【讨论】:

    【解决方案2】:

    以下对我有用:

    >>> 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 获得任何数据吗?在此之前,您是否从中读取过任何数据,可能会让读者筋疲力尽?

    【讨论】:

      【解决方案3】:

      首先关于您的具体问题:尝试检查是否真的有一个名为“Reseller”的键,它可能有不同的大小写或额外的空间。查看所有键的列表(假设未用尽 DictReader):

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

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

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

      【讨论】:

      • OP 的代码使用x.get('Reseller'),如果指定的键不存在则返回None ...所以他会得到[None, None, ...]。此外,他说map(lambda x: x, reseller_csv) 返回“无”(大概是[]),而根据您的错误键假设,结果将是一个字典列表。
      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2012-07-24
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多