在for循环中剥离扩展

我试图剥离.csv扩展名,以便该文件只保存为name.xslx而不是name.csv.xlsx但这似乎并没有工作。 我将不胜感激一些帮助。 谢谢。

import os import glob import csv import openpyxl import os.path #convert the csv to xslx for csvfile in glob.glob(os.path.join('.', '*.csv')): wb = openpyxl.Workbook() ws = wb.active with open(csvfile, 'rb') 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 base = os.path.basename(csvfile) wb.save(base + '.xlsx') 

因为os.path.basename不符合你的想法:

 >>> csvfile = "/path/to/my_file.csv" >>> os.path.basename(csvfile) 'my_file.csv' 

可以使用os.path.splitext

 >>> os.path.splitext(csvfile) ('/path/to/my_file', '.csv') 

注意不好,但有点unweildy。 就我个人而言,我更喜欢pathlib

 >>> import pathlib >>> p = pathlib.Path(csvfile) >>> p PosixPath('/path/to/my_file.csv') 

它有一个非常好的OOP接口:

 >>> p.name 'my_file.csv' >>> p.suffix '.csv' >>> p.with_suffix('.xlsx') PosixPath('/path/to/my_file.xlsx') 

你通常可以直接使用pathlib.Path对象,但是你总是可以得到string,但是,如果这是你的第三方库所期望的:

 >>> str(p.with_suffix('.xlsx')) '/path/to/my_file.xlsx' 

而不是basename()使用base = os.path.splitext(csvfile)[0]