我想编写一个python代码,该代码读取当前工作目录中的所有xlsx文件,并将它们输出为CSV文件。
单个Excel xlsx文件包含多个工作表,因此我必须为每个工作表创建一个CSV文件。 CSV的文件名应为.csv
我的代码是:
import os
import openpyxl
import csv
for excelFile in os.listdir('.'):
if excelFile.endswith('.xlsx'):
wb = openpyxl.load_workbook(excelFile)
for sheet in wb:
sheetname=sheet.title
csvFileName = open(excelFile +"-"+ sheetname+ '.csv', 'w', newline='')
csvFile = csv.writer(csvFileName)
for rowNum in range(1, sheet.max_row + 1):
rowData = []
for colNum in range(1, sheet.max_column + 1):
cellData = sheet.cell(row=rowNum, column=colNum).value
rowData.append(cellData)
csvFile.writerow(rowData)
csvFileName.close()
它给了我想要的东西,但我唯一不了解的是输出名称,例如:example.xlsx-sheet1.csv。但是我不想在这里显示.xlsx,所以我想要的是没有.xlsx的文件名,因此结果是example-sheet1.cvs。
那么我应该对当前代码进行什么更改?
答案 0 :(得分:2)
打开新文件时,只需从excelFile
中删除扩展名:
import os
import openpyxl
import csv
for excelFile in os.listdir('.'):
name, extension = os.path.splitext(excelFile)
if extension == 'xlsx':
wb = openpyxl.load_workbook(excelFile)
for sheet in wb:
sheetname=sheet.title
csvFileName = open('{}-{}.csv'.format(name, sheetname), 'w', newline='')
csvFile = csv.writer(csvFileName)
for rowNum in range(1, sheet.max_row + 1):
rowData = []
for colNum in range(1, sheet.max_column + 1):
cellData = sheet.cell(row=rowNum, column=colNum).value
rowData.append(cellData)
csvFile.writerow(rowData)
csvFileName.close()
换句话说,您应该尝试避免在MixedCase约定中命名变量,并坚持小写和下划线。我建议您仔细阅读PEP8指南,以更好地了解通用命名约定-https://www.python.org/dev/peps/pep-0008/。