2017-02-13 68 views
0

我有信息的多個文本文件,如下列:將多個文本文件寫入不同工作表上的一個Excel工作簿?

Agilent Technologies, Inc. 
Date|Previous Close|Open|Day Low|Day High 
2017-02-12|$50.47|$50.51|$50.02|$50.59 

每個文本文件由其ticker位於上的文本文件master.txt新線命名。我想要一個工作簿在每個片材上面的數據應該由ticker命名因此,我使用以下代碼:

import xlwt 
textfile = "C:/Python27/SublimeText/Stocks/Master/Excel.txt" 

with open("master.txt", 'r') as f: 
    tickers = [line.rstrip('\n') for line in f] 

def is_number(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 


style = xlwt.XFStyle() 
style.num_format_str = '#,###0.00' 

for ticker in tickers: 
    try: 
     f = open("%s.txt" % ticker, 'r+') 
    except: 
     pass 
    row_list = [] 
    for row in f: 
     row_list.append(row.split('|')) 
    column_list = zip(*row_list) 
    workbook = xlwt.Workbook() 
    worksheet = workbook.add_sheet('%s' % ticker) 
    i = 0 
    for column in column_list: 
     for item in range(len(column)): 
      value = column[item].strip() 
      if is_number(value): 
       worksheet.write(item, i, float(value), style=style) 
      else: 
       worksheet.write(item, i, value) 
     i+=1 
    workbook.save(textfile.replace('.txt', '.xls')) 

當運行上述代碼中的每個ticker覆蓋,而不是增加一個新的片材的最後一個。另一個問題是數據只傳輸到第一列。例如,我在上面給的例子文本文件看起來像Excel中的以下情況:

Agilent Technologies, Inc. 
Date 
2017-02-12 
+0

您將創建爲每個訂單一個新的工作簿。如果你想在一個工作簿上放置多張工作表,你應該把'workbook = xlwt.Workbook()'移動到'tickers'循環中的ticker之前並將'workbook.save'移動到循環之後。 –

回答

1
workbook = xlwt.Workbook() # moved outside the loop 
for ticker in tickers: 
    with open("%s.txt" % ticker, 'r') as f: 
     worksheet = workbook.add_sheet('%s' % ticker) 
     for row, line in enumerate(f): 
      line = line.rstrip() 
      for col, value in enumerate(line.split('|')): 
       if is_number(value): 
        worksheet.write(row, col, float(value), style=style) 
       else: 
        worksheet.write(row, col, value) 

workbook.save('all_the_files.xls')) 
相關問題