2016-06-29 1 views
0

以下のスクリプトでは、ヘッダーの名前を変更したり、名前を変更したりする方法がわかりません。w.writerowが終了した後にpython renameヘッダー行

import csv,time,string,os 

print "rendering report. This will take a few minutes..." 

raw_report = "\\\\network\\x\\RAWREPORT.csv" 
today = time.strftime("%Y-%m-%d") 

fields = ["As of Date", "EB", "Cycle", "Col", "APP Name", "Home Country" ] 

with open(raw_report) as infile, open("c:\\upload\\test_" + today + ".csv", "wb") as outfile: 
    r = csv.DictReader(infile) 
    w = csv.DictWriter(outfile, fields, extrasaction="ignore") 
    w.writeheader() 
    for row in r: 
     w.writerow(row) 

このスクリプトは正常に動作し、それが約90列を持つ.csvファイルのうち、6列がかかりますが、私の出力ファイルにfieldsにのみ6列を書くために、私は名前によってそれらを呼び出す必要があります。

しかし、最終的には別の名前を付けてください(例:"As of Date", "EB"の代わりに"order_date", "phone_number"...)。

私は最初の行をスキップし、自分を書くのアプローチを試してみました:

r = csv.DictReader(infile) 
w = csv.DictWriter(outfile, fields, extrasaction="ignore") 
next(r, None) 
w.writerow(["order_date","phone_number",...]) 

が、名前が一致しないため、その後のpythonを新しいファイルにコピーする列を知りません。

私は何をしようとしていますか?名前ではなく数値でコピーしたい列を参照できますか?すべてコピーしたら最初の行の値を変更して元に戻す方法はありますか?

答えて

0

私はこれについて誤って考えていました。元のファイルの列としてfieldsを定義できますが、2つの別々のファイルであるため、必ず出力ファイルに含める必要はありません。

このコードは動作します:

fields = ["As of Date", "EB", "Cycle", "Col", "APP Name", "Home Country" ] 
with open(raw_report) as infile, open("c:\\upload\\test_" + today + ".csv", "wb") as outfile: 
    r = csv.DictReader(infile) 
    w = csv.DictWriter(outfile, fields, extrasaction="ignore") 
    #w.writeheader() #remove the writeheader command 

    #write our custom header 
    wtr = csv.writer(outfile)  
    wtr.writerow(["order_date", "phone_number", etc....]) 

    #then, write the rest of the file 
    for row in r: 
     w.writerow(row) 
関連する問題