Получить имя листа из текущего листа в Loops in Python - PullRequest
0 голосов
/ 02 июля 2018

Я хочу написать код на 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.

Итак, что я должен изменить для текущего кода?

1 Ответ

0 голосов
/ 02 июля 2018

При открытии нового файла просто удалите расширение из 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/.

...