在 Python 的循环中从当前 sheet 获取 sheetname

Get sheetname from current sheet in Loops in Python

我想编写一个 python 代码来读取当前工作目录中的所有 xlsx 文件并将它们输出为 CSV 文件。

一个 Excel xlsx 文件包含多个 sheet,因此我必须为每个 sheet 创建一个 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.

那么我应该对当前代码进行哪些更改?

打开新文件时,只需删除 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()

另一方面,您应该尽量避免以大小写混合的方式命名变量,并坚持使用小写字母和下划线。我建议您仔细阅读 PEP8 指南,以便更好地了解常见的命名约定 - https://www.python.org/dev/peps/pep-0008/.