gpt4 book ai didi

Python脚本读取一个目录中的多个excel文件并将它们转换为另一个目录中的.csv文件

转载 作者:行者123 更新时间:2023-12-04 20:58:23 26 4
gpt4 key购买 nike

我对 python 和 Stackoverflow 比较陌生,但希望任何人都可以对我当前的问题有所了解。我有一个 python 脚本,它从一个目录获取 excel 文件(.xls 和 .xlsx)并将它们转换为 .csv 文件到另一个目录。它在我的示例 excel 文件(由 4 列和 1 行组成,用于测试目的)上工作得非常好,但是当我尝试针对具有 excel 文件的不同目录(文件大小更大)运行我的脚本时,我得到断言错误。我附上了我的代码和错误。期待对这个问题有一些指导。谢谢!

import os
import pandas as pd

source = "C:/.../TestFolder"
output = "C:/.../OutputCSV"

dir_list = os.listdir(source)

os.chdir(source)

for i in range(len(dir_list)):
filename = dir_list[i]
book = pd.ExcelFile(filename)

#writing to csv
if filename.endswith('.xlsx') or filename.endswith('.xls'):
for i in range(len(book.sheet_names)):
df = pd.read_excel(book, book.sheet_names[i])

os.chdir(output)

new_name = filename.split('.')[0] + str(book.sheet_names[i])+'.csv'
df.to_csv(new_name, index = False)

os.chdir(source)

print "New files: ", os.listdir(output)

The error message I receive when executing this script in the terminal shows as below:

最佳答案

由于您使用 Windows,因此请考虑使用 Jet/ACE SQL 引擎(Windows .dll 文件)来查询 Excel 工作簿并导出为 CSV 文件,从而绕过使用 pandas 数据帧加载/导出的需要。

具体来说,使用 pyodbc要与 Excel 文件建立 ODBC 连接,请遍历每个工作表并使用 SELECT * INTO ... 导出到 csv 文件SQL Action 查询。 openpyxl模块用于检索工作表名称。下面的脚本不依赖于相对路径,因此可以从任何地方运行。假设每个 Excel 文件都有完整的标题列(顶行已用范围内没有丢失单元格)。

import os
import pyodbc
from openpyxl import load_workbook

source = "C:/Path/To/TestFolder"
output = "C:/Path/To/OutputCSV"

dir_list = os.listdir(source)

for xlfile in dir_list:
strfile = os.path.join(source, xlfile)

if strfile.endswith('.xlsx') or strfile.endswith('.xls'):
# CONNECT TO WORKBOOK
conn = pyodbc.connect(r'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};' + \
'DBQ={};'.format(strfile), autocommit=True)
# RETRIEVE WORKBOOK SHEETS
sheets = load_workbook(filename = strfile, use_iterators = True).get_sheet_names()

# ITERATIVELY EXPORT SHEETS TO CSV IN OUTPUT FOLDER
for s in sheets:
outfile = os.path.join(output, '{0}_{1}.csv'.format(xlfile.split('.')[0], s))
if os.path.exists(outfile): os.remove(outfile)

strSQL = " SELECT * " + \
" INTO [text;HDR=Yes;Database={0};CharacterSet=65001].[{1}]" + \
" FROM [{2}$]"
conn.execute(strSQL.format(output, os.path.basename(outfile, s))
conn.close()

**注意:此过程会创建一个 schema.ini与每次迭代连接的文件。可以删除。

关于Python脚本读取一个目录中的多个excel文件并将它们转换为另一个目录中的.csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com