我有一个包含大量 Excel 工作簿的文件夹。有没有办法使用 Python 的 xlrd、xlutiles 和 xlsxWriter 将此文件夹中的每个文件转换为 CSV 文件?
我希望新转换的 CSV 文件具有扩展名“_convert.csv”。
否则...
有没有办法合并文件夹中的所有 Excel 工作簿来创建一个大文件?
我一直在寻找两种方法都可以做到,但没有任何效果......
我有一个包含大量 Excel 工作簿的文件夹。有没有办法使用 Python 的 xlrd、xlutiles 和 xlsxWriter 将此文件夹中的每个文件转换为 CSV 文件?
我希望新转换的 CSV 文件具有扩展名“_convert.csv”。
否则...
有没有办法合并文件夹中的所有 Excel 工作簿来创建一个大文件?
我一直在寻找两种方法都可以做到,但没有任何效果......
使用pywin32,这将找到.xlsx
指定目录中的所有文件并打开并将它们重新保存为.csv
. 使用...找出正确的命令相对容易pywin32
......只需记录一个 Excel 宏并手动执行打开/保存,然后查看生成的宏。
import os
import glob
import win32com.client
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
for f in glob.glob('tmp/*.xlsx'):
fullname = os.path.abspath(f)
xl.Workbooks.Open(fullname)
xl.ActiveWorkbook.SaveAs(Filename=fullname.replace('.xlsx','.csv'),
FileFormat=win32com.client.constants.xlCSVMSDOS,
CreateBackup=False)
xl.ActiveWorkbook.Close(SaveChanges=False)
我将尝试使用我的库pyexcel
:
from pyexcel import Book, BookWriter
import glob
import os
for f in glob.glob("your_directory/*.xlsx"):
fullname = os.path.abspath(f)
converted_filename = fullname.replace(".xlsx", "_converted.csv")
book = Book(f)
converted_csvs = BookWriter(converted_filename)
converted_csvs.write_book_reader(book)
converted_csvs.close()
如果你有一个超过 2 张的 xlsx,我想你会生成超过 2 个 csv 文件。命名约定是:“file_converted_%s.csv”% your_sheet_name。该脚本会将所有转换后的 csv 文件保存在您拥有 xlsx 文件的同一目录中。
此外,如果您想将所有内容合并为一个,也非常容易。
from pyexcel.cookbook import merge_all_to_a_book
import glob
merge_all_to_a_book(glob.glob("your_directory/*.xlsx"), "output.xlsx")
如果你想做更多,请阅读教程
看看openoffice的python库。虽然,我怀疑 openoffice 会支持 MS 文档文件。
Python 没有对 Excel 文件的本机支持。
当然。使用诸如glob之类的东西迭代您的文件并将它们提供给您提到的模块之一。使用 xlrd,您可以使用open_workbook按名称打开每个文件。这会给你一个Book 对象。然后,您将需要嵌套循环来迭代 Book 中的每个 Sheet 对象、Sheet 中的每一行以及 Row 中的每个单元格。如果您的行不太宽,您可以将 Row 中的每个 Cell 附加到 Python 列表中,然后将该列表提供给csv.writer objectwriterow
的方法。
由于这是一个高级问题,因此此答案掩盖了一些细节,例如如何调用xlrd.open_workbook
以及如何创建csv.writer
. 希望在谷歌上搜索这些特定点的示例将使您到达您需要去的地方。
您可以使用此功能从每个文件中读取数据
import xlrd
def getXLData(Filename, min_row_len=1, get_datemode=False, sheetnum=0):
Data = []
book = xlrd.open_workbook(Filename)
sheet = book.sheets()[sheetnum]
rowcount = 0
while rowcount < sheet.nrows:
row = sheet.row_values(rowcount)
if len(row)>=min_row_len: Data.append(row)
rowcount+=1
if get_datemode: return Data, book.datemode
else: return Data
以及将列表组合在一起后写入数据的此功能
import csv
def writeCSVFile(filename, data, headers = []):
import csv
if headers:
temp = [headers]
temp.extend(data)
data = temp
f = open(filename,"wb")
writer = csv.writer(f)
writer.writerows(data)
f.close()
请记住,您可能必须重新格式化数据,尤其是当 Excel 文件中有日期或整数时,因为它们存储为浮点数。
编辑添加调用上述函数的代码:
import glob
filelist = glob.glob("*.xls*")
alldata = []
headers = []
for filename in filelist:
data = getXLData(filename)
headers = data.pop(0) # omit this line if files do not have a header row
alldata.extend(data)
writeCSVFile("Output.csv", alldata, headers)