我有一个python脚本,只能从CSV文件中选择特定的列。 我正在使用DictWriter来做到这一点。 虽然它适用于大多数场合,但它有时表现得很奇怪。 输出文件省略了输入中的第一列,即使我已将其包含在字段名称参数中。这种情况发生在特定文件中,对于某些文件,我得到输出中字段名称中提到的所有列,有些文件省略了第一列。我是python的新手并且一无所知为什么它有时会省略第一列。 我尝试在写入之前打印记录,然后在那里看到有值的列,但输出文件中缺少该列。
with open("F:\\TESTpy\\testin2.csv","rt",encoding='utf-8') as infile, open("F:\\TESTpy\\out.csv", "w", newline="",encoding='utf-8') as outfile:
r = csv.DictReader(infile,delimiter=',')
w = csv.DictWriter(outfile, fieldnames=['CardNumber'],extrasaction="ignore")
w.writeheader()
for row in r:
print ('rrrrrr')
print(row)
w.writerow(row)
这是我的输入文件的样子
以文本形式在此处添加输入文件。数据直到Approval_Code是标题然后有一个CRLF,之后是数据记录。
CardNumber,BookletNumber,MERCHANT_NAME,插座,MERCHANTOUTLETCODE,MERCHANTOUTLETTYPE,ERPCODE,大区,发行人,EMPLOYEE_NUMBER,Card_Holder,名字,姓氏,移动,TRANSACTION_DATE,Transaction_Time,Pos_Name,Initiated_By,Program_Group,CARDPROGRAMGROUPTYPENAME,TRANSACTION_TYPE,Amount_Rs,Bill_Amount,Stored_Value_RsPoints ,INVOICE_NUMBER,Response_Message,Reason_of_Cancel,DATEATCLIENT,PARENTCARDNUMBER,Pre_Transaction_Card_Balance,Expired_Value_RsPoints,TRANSACTION_MODE,Adjustment_amount_Rs,Transaction_PostDate,Currency_Symbol_for_converted_Amount,MERCHANTCURRENCYCODE,Upgraded_Program_group,Currency_Converted_Amount,Tier_upgraded_On,Card_Balance_RsPoints,EXPIRY_DATE,REFERENCE_NUMBER,Promotional_Value_RsPoints,Original_CardNumber_Before_Reissue,Promotional_Details,Corporate_Name,Card_Entry_Mode,Batch_Number,Request_Amount_Rs ,注意事项,Approval_Code 999999999999,678,ABOF,ABOF-企业,, CORPORATE ,,东 班加罗尔,ABOF ,,,,,, 06/06 / 2017,13:16:17,ABOF-02,V1,长裤 Gold-500,零售礼品卡,GIFT CARD REDEEM,-100.00 ,, 0.00,6 / 6/2017 下午1:16:17,商家无权接受此事 卡,无,06/06/2017,0.00,0.00,ONLINE 0.00,06 / 06/2017 ,,,,,, 0.00,,107 ,,,,,手册,2637061,0.00,{SENDERMOBILENUMBER〜9999999999 },