Sou*_*jee 8 python excel python-2.7 python-3.x pandas
我有一个代码,它在一个目录中生成多个 CSV 文件。我想在 excel 中生成一个报告,它将包含作为单独选项卡的 CSV 文件。我已经使用了以下代码:
import pandas as pd
import os
import csv
import glob
path = "/MyScripts"
all_files = glob.glob(os.path.join(path, "*.csv"))
df_from_each_file = (pd.read_csv(f) for f in all_files)
df_from_each_file.to_excel(writer, sheet_name='ReturnData.csv')
writer.save()
Run Code Online (Sandbox Code Playgroud)
但它给出了以下错误: AttributeError: 'generator' object has no attribute 'to_excel' 不确定我哪里出错了。我需要导入任何特定的库来解决问题吗?
Python 版本是 2.7
jpp*_*jpp 10
这里有两个问题:
sheet_name参数是一个常数。要导出到多个工作表,您需要为每个工作表指定不同的名称。for为此,您可以使用一个简单的循环:
writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')
df_from_each_file = (pd.read_csv(f) for f in all_files)
for idx, df in enumerate(df_from_each_file):
df.to_excel(writer, sheet_name='data{0}.csv'.format(idx))
writer.save()
Run Code Online (Sandbox Code Playgroud)
您的工作表将被命名为data0.csv、data1.csv等。 如果您需要文件名作为您的工作表名称,您可以重组您的逻辑并使用该os模块从路径中提取文件名:
import os
writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')
for f in all_files:
df = pd.read_csv(f)
df.to_excel(writer, sheet_name=os.path.basename(f))
writer.save()
Run Code Online (Sandbox Code Playgroud)
小智 5
以下是 jpp 解决方案的完整源代码:
import os
import pandas as pd
import glob
path = './'
all_files = glob.glob(os.path.join(path, "*.csv"))
writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')
for f in all_files:
df = pd.read_csv(f)
df.to_excel(writer, sheet_name=os.path.splitext(os.path.basename(f))[0], index=False)
writer.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14613 次 |
| 最近记录: |