我有一个包含大量Excel工作簿的文件夹。有没有办法使用Python的xlrd,xlutiles和xlsxWriter将此文件夹中的每个文件转换为CSV文件?
我希望新转换的CSV文件具有扩展名' _convert.csv'。
,否则...
有没有办法合并文件夹中的所有Excel工作簿来创建一个大文件?
我一直在寻找两种方法,但没有任何效果......
答案 0 :(得分:1)
使用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)
答案 1 :(得分:0)
看看openoffice的python库。虽然,我怀疑openoffice会支持MS文档文件。
Python对Excel文件没有本机支持。
答案 2 :(得分:0)
不确定。使用类似glob的内容迭代您的文件,并将它们提供给您提到的其中一个模块。使用xlrd,您可以使用open_workbook按名称打开每个文件。这会给你一个Book object。然后,您将需要嵌套循环迭代Book中的每个Sheet对象,Sheet中的每一行以及Row中的每个Cell。如果您的行不是太宽,您可以将一行中的每个单元格附加到Python列表中,然后将该列表提供给csv.writer object的writerow
方法。
由于这是一个高级别的问题,因此这个答案掩盖了一些细节,例如如何调用xlrd.open_workbook
以及如何创建csv.writer
。希望谷歌搜索这些特定点的例子将让你到达你需要去的地方。
答案 3 :(得分:0)
您可以使用此功能读取每个文件中的数据
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)
答案 4 :(得分:0)
我将尝试使用我的库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()
如果您的xlsx超过2张,我想您将生成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")
如果您想了解更多信息,请阅读tutorial