在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]