【发布时间】:2022-11-13 04:05:31
【问题描述】:
我有一个代码,如果我手动为 path, directory and file name 插入字符串,它可以正常工作,这是代码:
path = r"test//ab3b//ab3b_all_anal.xlsx"
directory = "test"
file1 = "test//ab3b//ab3b80.csv"
df1 = all_calc_80(file1, directory)
file2 = "test//ab3b//ab3b80m.csv"
df2 = all_calc_80m(file2, directory)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = '80')
df2.to_excel(writer, sheet_name = '80m')
writer.close()
测试目录有名为ab3b, bg3a, ge3b等的子目录,并且在每个子目录中都有以相同方式命名的文件:ab3b80.csv, ab3b80m.csv; bg3a80.csv, bg3a80m.csv; ge3b80.csv, ge3b80m.csv。
每个基于结尾80.csv or 80m.csv 的文件使用不同的函数进行分析。
最终输出是一个在csv 文件结束后带有工作表名称的 Excel 工作簿。
现在我正在遍历整个目录test,在这里我只需给出directory 的名称,一切都会从那里自动进行。到目前为止,我有:
import os
import xlsxwriter
rootdir = 'test'
slovar = {}
for subdir, dirs, files in os.walk(rootdir):
slovar[subdir] = files
for key, value in slovar.items():
if len(key) > 4: #to get just subdirectories I need
end = key[-4:]
path = 'r' + '\'' + key + '\\\\' + end + '_all_anal.xlsx' + '\''
print(path)
for vrednost in value:
if vrednost.endswith('80.csv'):
file1 = vrednost
df1 = all_calc_80(file1, rootdir)
elif vrednost.endswith('80m.csv'):
file2 = vrednost
df2 = all_calc_80m(file2, rootdir)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = '80')
df2.to_excel(writer, sheet_name = '80m')
writer.close()
但我收到错误消息:Invalid extension for engine '<property object at 0x000002123659D0E0>': 'xlsx''。
我认为由于 Windows 路径或对象类型中的 / 和 \ 可能存在一些问题,即使当我只打印键和值时,我得到有用的输出,路径的名称也正确写入。
但我真的不明白为什么手动一切正常而自动化不行。
【问题讨论】:
标签: python excel automation operating-system xlsxwriter