使用python的openpyxl库实现:读取一个目录下的所有txt和csv文件,把这些文档的所有内容都转存到同一个Excel的不同工作表中。但是,在转存过程中,如果发现多个文档的内容是同类型的,即表头都相同,则这些文档的内容应该合并到同一个工作表中。
时间: 2024-02-17 14:04:01 浏览: 172
利用openpyxl,Python对excel读写文件
好的,这是一个比较复杂的问题。让我一步步来为您解决。
首先,我们需要用Python的os模块来遍历目录下的所有txt和csv文件。然后,我们可以使用openpyxl库来创建一个Excel文件,并在其中创建多个工作表。接下来,我们可以用pandas库来读取txt和csv文件,并将它们的数据合并到同一个工作表中。最后,我们需要判断每个工作表的表头是否相同,如果相同则将它们合并到同一个工作表中。
下面是一个示例代码,您可以根据您的具体需求进行修改和优化:
```python
import os
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.utils import quote_sheetname
# 遍历目录下的所有txt和csv文件
def get_files(path):
files = []
for file in os.listdir(path):
if file.endswith(".txt") or file.endswith(".csv"):
files.append(os.path.join(path, file))
return files
# 将数据写入Excel工作表
def write_to_sheet(df, wb, sheet_name):
sheet = wb.create_sheet(sheet_name)
for r in dataframe_to_rows(df, index=False, header=True):
sheet.append(r)
# 将所有数据写入Excel文件
def write_to_excel(files, output_file):
wb = Workbook()
sheet_names = []
for file in files:
df = pd.read_csv(file)
# 获取表头
header = list(df.columns)
# 如果表头相同,则将数据合并到同一个工作表中
if header in sheet_names:
sheet_name = header[0]
else:
sheet_name = quote_sheetname(header[0])
sheet_names.append(header)
write_to_sheet(df, wb, sheet_name)
wb.save(output_file)
if __name__ == "__main__":
# 设置目录和输出文件名
path = "your_directory"
output_file = "output.xlsx"
files = get_files(path)
write_to_excel(files, output_file)
```
在这个示例代码中,我们使用os.listdir()函数来获取目录下的所有文件名,然后使用os.path.join()函数来获取完整的文件路径。接着,我们使用pandas库的read_csv()函数来读取txt和csv文件,并将它们转换为DataFrame格式。然后,我们使用openpyxl库的create_sheet()函数创建一个新的工作表,并使用dataframe_to_rows()函数将DataFrame格式的数据转换为行列表。最后,我们使用append()函数将行列表添加到工作表中。
在将数据写入工作表之前,我们使用quote_sheetname()函数来确保工作表的名称是合法的。如果表头相同,则使用相同的工作表,否则创建一个新的工作表。
最后,我们使用openpyxl库的save()函数将Excel文件保存到磁盘上。
希望这个示例代码可以帮助到您。
阅读全文