【问题标题】:Read inputfile as csv in python在python中将输入文件读取为csv
【发布时间】:2014-12-01 22:05:11
【问题描述】:

我想从 STDIN 读取一个 csv 文件并对其进行操作。

以下是读取 csv 文件并进行所需操作的代码。这工作正常。但我想从 STDIN 获取输入。

import csv
with open('hospital_data.csv', 'rb') as csvfile:
    myDict = {}

    csvreader = csv.reader(csvfile, delimiter=',')
    for row in csvreader:
        if row[6] not in myDict.keys():
            #print 'Zipcode: ' + row[6] + ' Hospital code: ' + row[1]
            myDict[row[6]] = 1
        elif row[6] in myDict.keys():
            #print 'value in row '+ str(myDict[row[6]])
            myDict[row[6]] += 1

在 Python 中有没有办法从 STDIN 读取文件作为 csv 文件?

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案1】:

    csv.reader 将采用任何产生行的内容,因此您可以使用此答案中显示的任何方法从标准输入获取行: How do you read from stdin in Python?

    由于它的灵活性,我自己偏爱fileinput。例如:

    import csv
    import fileinput
    
    myDict = {}
    csvreader = csv.reader(fileinput.input(mode='rb'), delimiter=',')
    

    但这也有效:

    import csv
    import sys
    
    myDict = {}
    csvreader = csv.reader(sys.stdin, delimiter=',')
    

    如果您这样做,您将希望使用-u 命令行参数运行以使流二进制化,如果这对您的平台有影响的话: https://docs.python.org/2/using/cmdline.html#cmdoption-u

    在任何一种情况下,您都需要使用 control-D 来标记输入的结束。

    请注意,检查键是否在字典中的正确方法是if row[6] in myDict,而不是检查keys。实际上,如果您只需要在密钥不存在时使用默认值,请使用get

    for row in csvreader:
        myDict[row[6]] = myDict.get(row[6], 0) + 1
    

    或者查看collections.Counter,因为您使用的是 2.7:

    myDict = collections.Counter(row[6] for row in csvreader)
    

    【讨论】:

      【解决方案2】:

      使用 sys.stdin,它是类文件对象。

      import sys
      import csv
      
      data = sys.stdin.readlines()
      csvreader = csv.reader(data, delimiter=',')
      for row in csvreader:
          print row
      

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        相关资源
        最近更新 更多