2014-03-05 109 views
0

我用下面這段代碼到所有CSV文件合併:每個文件下面有10,000行:添加日期列到追加輸出csv文件在python

billing_report_2014-02-01.csv billing_report_2014-02-02。 CSV :

fout=open("out.csv","a") 
for num in range(1,10): 
    print num 
    for line in open("billing_report_2014-02-0"+str(num)+".csv"): 
     fout.write(line) 
for num in range(10,29): 
    print num 
    for line in open("billing_report_2014-02-"+str(num)+".csv"): 
     fout.write(line) 
fout.close() 

,但現在我想新的日期列添加到out.csv文件如何添加日期列,並有「2014年2月1日」的價值,我追加的每一行billing_report_2014- 02-01到out.csv和 值「2014-02-02」我將billing_report_2014-02-02追加到out.csv的每一行我怎麼能這個呢?

+0

@Nabla你能澄清一點嗎?我對python相當陌生。謝謝 – JPC

+0

我所說的在這種情況下並不是非常必要的,我評論得太快了。不過,您可能需要查看['csv'](http://docs.python.org/2/library/csv.html)模塊,它有助於處理csv文件。還有['datetime'](http://docs.python.org/2/library/datetime.html)模塊,它可以簡化你的日期格式,參見['date.strftime'](http:// docs.python.org/2/library/datetime.html#strftime-strptime-behavior)。 – Nabla

回答

2

列出你想要的工作,然後從取數據,建立了去除追蹤新行輸入文件生成的文件名,並增加了一個新的領域與日期。 ..例如:

filenames = [ 
    'billing_report_2014-02-01.csv', 
    'billing_report_2014-02-02.csv' 
] 

with open('out.csv', 'w') as fout: 
    for filename in filenames: 
     to_append = filename.rpartition('_')[2].partition('.')[0] 
     with open(filename) as fin: 
      fout.writelines('{},{}\n'.format(line.rstrip(),to_append) for line in fin) 
+0

好的,我得到關於文件名的一點..應該把它放在我自己。 –

1

我想你可以只添加日期末:

for line in open("billing_report_2014-02-0"+str(num)+".csv"): 
    fout.write(line+',DATE INFORMATION') 

我假設你的CSV真的逗號分隔,如果是標籤separted的人物應該是\ t

你可以還可以使用通過改變線的一箇中間步驟:

line = line + ', DATE INFORMATION' 

與您試圖添加的文件名,日期只是將它加入每個變量:

line = line + ', 2014-02-0'+ str(num//10) 

你可以使用替換功能,如果它始終是「有限責任公司」字符串表達式,見下文

>>> string = "100, 90101, California, Example company,LLC, other data" 
>>> string.replace(',LLC',';LLC') 
'100, 90101, California, Example company;LLC, other data' 
>>> 

的例子把他們放在一起,並試圖帶來一些來自@喬恩的靈感在克萊門茨以及(獎勵!):

def combine_and_add_date(year, month, startday, endday, replace_dict): 
    fout=open("out.csv","a") 
    for num in range(startday,endday+1): 
     daynum = str(num) 
     if len(daynum) ==1: 
      daynum = '0'+daynum 

     date_info = str(year+'-'month+'-'+daynum) 
     source_name = 'billing_report_'+date_info+'.csv' 

     for line in open(source_name): 
      for key in replace_dict: 
       line.replace(key,replact_dict[key]) 

      fout.write(line+','+date_info) 

    fout.close() 

我希望這個作品,你應該(希望我是一個福利局...)這樣使用它,請注意字典設計,讓你做出各種更換

combine_and_add_date("2014","02",1,28, {',LLC': ';LLC', ',PLC':';PLC'}) 

手指交叉

+0

我想他可能想要實際的日期。 –

+0

@ 2705114-john這幾乎是行得通的,我的文件是用逗號分開的,但是在商業公司columne下有一個公司有「companyname,LLC」。所以當我使用上面的代碼時,與「,LLC」有公司的行。將再增加一列。我怎麼才能真正解決這個問題? – JPC