簡體   English   中英

在python中將inputfile讀為csv

[英]Read inputfile as csv in python

我想從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文件?

csv.reader將獲取產生行的任何內容,因此您可以使用此答案中顯示的任何方法從stdin獲取行: 如何從Python中讀取stdin?

由於其靈活性,我fileinput自己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來標記輸入的結尾。

請注意,檢查密鑰是否在dict中的正確方法是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)

使用sys.stdin,它是類似文件的對象。

import sys
import csv

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM