我的文件夹中有13个名为1,2,3到13的csv文件(1.csv,2.csv,3csv等),我想将它们转换为单个excel文件(xlsx)表格从1到13开始,但按数字顺序排列!为此,我使用了这个:
import glob, csv, xlwt, os
wb = xlwt.Workbook()
for filename in glob.glob("data/*.csv"):
(f_path, f_name) = os.path.split(filename)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(f_short_name)
spamReader = csv.reader(open(filename, 'r'))
for rowx, row in enumerate(spamReader):
for colx, value in enumerate(row):
ws.write(rowx, colx, value)
wb.save("compiled.xlsx")
我唯一的问题是我的输出:compiled.xlsx没有按照我想要的顺序(从1,2,3,4,5 ... 13开始),它将从4开始,13,11,12,5,6,8等。我按照所需的顺序将文件放在我的文件夹中,如何更改我的代码以获得正确的表单排序,我使用python 3,感谢您的时间!
答案 0 :(得分:1)
您可以按文件名将csv文件排序到列表中,然后使用该列表。
我假设所有文件名都可以转换为int
类型。
files = [os.path.split(filename) for filename in glob.glob("csvs/*.csv")]
ordered_files = sorted(
files, key=lambda x: int(os.path.splitext(x[1])[0])
)
wb = xlwt.Workbook()
for f_path, f_name in ordered_files:
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(f_short_name)
spamReader = csv.reader(open(os.path.join(f_path, f_name), 'r'))
for rowx, row in enumerate(spamReader):
for colx, value in enumerate(row):
ws.write(rowx, colx, value)
wb.save("compiled.xlsx")