存在しない場合:のpythonのcsvライター行キーは、次のスクリプトを実行erroringさ
import csv,time,string,os,requests, datetime
test = "\\\\network\\Shared\\test.csv"
fields = ["id", "Expiration Date", "Cost", "Resale" ]
with open(test) as infile, open("c:\\upload\\tested.csv", "wb") as outfile:
r = csv.DictReader(infile)
w = csv.DictWriter(outfile, fields, extrasaction="ignore")
r = (dict((k, v.strip()) for k, v in row.items() if v) for row in r)
wtr = csv.writer(outfile)
wtr.writerow(["id", "upload_date", "cost", "resale"])
for i, row in enumerate(r, start=1):
row['id'] = i
print(row['Expiration Date']
row['Expiration Date'] = datetime.datetime.strptime(row['Expiration Date'][:10], "%m/%d/%Y").strftime("%Y-%m-%d")
w.writerow(row)
D:\Python\Scripts>python test.py
Traceback (most recent call last):
File "test.py", line 18, in <module>
print(row['Expiration Date'])
KeyError: 'Expiration Date'
だから、私は何が起こっているかを理解すると思います - 元のファイルから、このような何か:
Expiration Date Cost Resale
2016-01-01 1.00 2.00
1.42 2.42
2016-05-02 1.45 9.00
を私が集めることができるものから、有効期限の列には行がありません。それが私のエラーの原因であると仮定して、DictWriterに余白をスキップさせるにはどうしたらいいですか?
私はr =(dict(k、v.strip())のk、vのrow.items()の場合はv)の行について実際には理解していませんでした 'line - コードそのものは私は、書かれる前に各値に空白をトリミングするようにしましたが、正しいと思います。この行を削除すると、この特定の問題が解決されますが、コードは空白を取り除いていました。 –
@BrianPowellサンプルで使用した 'skipinitialspace = True'パラメータは、先行するすべての空白を取り除きます。それはあなたが必要とするものではありませんか? – jotasi
私は、最初に空白がある、または最後に 'hello'という値をシートに入れました(これは50列のようですが、私がここで示したものではありません)。その空白が出ていますが、それは私の辞書を台無しにしてしまったと思います。私の理解では、 'skipinitialspace'は値の先頭から空白を削除するだけです。 –