python-3.x 为什么此文件名的前导字符被strip()意外删除?[duplicate]

bvhaajcl  于 2023-02-01  发布在  Python
关注(0)|答案(2)|浏览(122)
    • 此问题在此处已有答案**:

How do the .strip/.rstrip/.lstrip string methods work in Python?(4个答案)
三年前关闭了。
我正在努力完成 * 用Python自动化枯燥的工作 *。我刚刚完成了这个项目(用Openpyxl从工作表中提取数据并将其放入CSV文件)。唯一意想不到的行为是,我的文件名并不完全按照我所期望的方式出现。电子表格文件名是作者作为示例文件提供的。它们采用"spreadsheet-aiderxlsx"的形式。而不是返回我所期望的文件名,strip()去掉前导的"s"。
这不是什么大事,但我很好奇为什么会发生这种事,我还没有弄清楚。
预期行为:spreadsheet-A.xlsx变为spreadsheet-A.csv实际行为:spreadsheet-A.xlsx变为preadsheet-A.csv
我猜问题出在第20和21行,关于strip,有一些我不知道的东西。

#!/usr/bin/python

# excelToCSV.py - Converts all excel files in a directory to CSV, one file
# per sheet

import openpyxl
from openpyxl.utils import get_column_letter
import csv
import os

for excelFile in os.listdir('.'):
    #Skip non-xlsx files, load the workbook object.
    if excelFile.endswith('.xlsx'):
        wbA = openpyxl.load_workbook(excelFile)
        #Loop through each sheet in the workbook
        for sheet in wbA.worksheets:    
            sheetName = sheet.title
            sheetA = wbA.get_sheet_by_name(sheetName)
            # Create the CSV filename from the excel filename and sheet title
            excelFileStripped = excelFile.strip('.xlsx')
            csvFilename = excelFileStripped + '.csv'
            # Create the csv.writer object for this csv file
            csvFile = open(csvFilename, 'w', newline='')
            csvWriter = csv.writer(csvFile)
            # Loop through every row in the sheet
            maxRow = sheetA.max_row
            maxCol = sheetA.max_column
            for rowNum in range(1, maxRow + 1):
                rowData = []
                # Loop through each cell in the row
                for colNum in range(1, maxCol + 1):
                    # Append each cell's data to rowData
                    x = get_column_letter(colNum)
                    coordinate = str(x) + str(rowNum)
                    cellA = sheetA[coordinate]
                    #cellValue = cellA.value 
                    rowData.append(cellA.value)
                    # Write the rowData list to the csv file
                csvWriter.writerow(rowData)

            csvFile.close()

    else:
        continue
wfypjpf4

wfypjpf41#

正如注解中提到的,strip实际上接受单个字符(长度为1的字符串)的可迭代对象,并从字符串的开头和结尾删除其中任何一个字符的所有示例(这里是docs)。
虽然您 * 可以 * 使用rstrip,但我建议使用os中专门用于处理路径的函数,例如:

import os

print(os.path.splitext('my_file.xlsx'))

输出:

('my_file', '.xlsx')

将其应用到代码中,您可能会得到:

for filename in os.listdir(os.curdir):
    name, extension = os.path.splitext(filename)
    if extension == '.xlsx':
        # Excel file: do stuff...
6jjcrrmo

6jjcrrmo2#

另一种摆脱结尾的方法可以是:

ending = ".csv"
txt = "Hello, my name is H.xlsx"
sep = '.'
rest = txt.split(sep, 1)[0]
new = rest+ending

这将删除结束部分并添加结束变量。

相关问题