将 CSV 批量转换为 XLSX,在 python 中保留子文件夹结构
Batch convert CSV to XLSX keeping subfolder structure in python
有人可以告诉我如何使用 Python 将 100 多个具有不同架构的 CSV 文件批量转换为保持原始子文件夹结构的单个 XLSX 文件吗?简而言之,我需要得到什么:
Folder:
Subfolder 1:
file.csv
Subfolder 2:
file2.csv
...
Subfolder N:
fileN.csv
目标:
Folder:
Subfolder 1:
file.csv
file.xlsx
Subfolder 2:
file2.csv
file2.xlsx
...
Subfolder N:
fileN.csv
fileN.xlsx
文件名不统一
我正在尝试下面的代码,但它只转换根文件夹中的文件。
for root, dirs, files in os.walk('.'):
for file in files:
for file in glob.glob(os.path.join('.', '*.csv')):
wb = openpyxl.Workbook()
ws = wb.active
with open(os.path.join(file), 'r') as f:
reader = csv.reader(f)
for r, row in enumerate(reader, start=1):
for c, val in enumerate(row, start=1):
ws.cell(row=r, column=c).value = val
wb.save(csvfile + '.xlsx')
调整代码,我能够让它工作。不是最整洁的,但有效:
for root, dirs, files in os.walk('.'):
for file in files:
if os.path.splitext(file)[-1] == ".csv":
file_path = os.path.join(root, file)
wb = openpyxl.Workbook()
ws = wb.active
with open(os.path.join(file_path), 'r') as f:
reader = csv.reader(f)
for r, row in enumerate(reader, start=1):
for c, val in enumerate(row, start=1):
ws.cell(row=r, column=c).value = val
wb.save(file_path + '.xlsx')
有人可以告诉我如何使用 Python 将 100 多个具有不同架构的 CSV 文件批量转换为保持原始子文件夹结构的单个 XLSX 文件吗?简而言之,我需要得到什么:
Folder:
Subfolder 1:
file.csv
Subfolder 2:
file2.csv
...
Subfolder N:
fileN.csv
目标:
Folder:
Subfolder 1:
file.csv
file.xlsx
Subfolder 2:
file2.csv
file2.xlsx
...
Subfolder N:
fileN.csv
fileN.xlsx
文件名不统一
我正在尝试下面的代码,但它只转换根文件夹中的文件。
for root, dirs, files in os.walk('.'):
for file in files:
for file in glob.glob(os.path.join('.', '*.csv')):
wb = openpyxl.Workbook()
ws = wb.active
with open(os.path.join(file), 'r') as f:
reader = csv.reader(f)
for r, row in enumerate(reader, start=1):
for c, val in enumerate(row, start=1):
ws.cell(row=r, column=c).value = val
wb.save(csvfile + '.xlsx')
调整代码,我能够让它工作。不是最整洁的,但有效:
for root, dirs, files in os.walk('.'):
for file in files:
if os.path.splitext(file)[-1] == ".csv":
file_path = os.path.join(root, file)
wb = openpyxl.Workbook()
ws = wb.active
with open(os.path.join(file_path), 'r') as f:
reader = csv.reader(f)
for r, row in enumerate(reader, start=1):
for c, val in enumerate(row, start=1):
ws.cell(row=r, column=c).value = val
wb.save(file_path + '.xlsx')