【发布时间】:2017-07-01 15:08:55
【问题描述】:
我有多个包含如下信息的文本文件:
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
【问题讨论】:
-
您正在为每个代码创建一个新的工作簿。如果您想在一个工作簿上有多个工作表,则应将
workbook = xlwt.Workbook()移动到for ticker in tickers循环之前并将workbook.save移动到循环之后。
标签: python excel python-2.7 xlwt