我正在尝试剥离.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')
答案 0 :(得分:1)
因为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')
注意不好,但有点不合适。就个人而言,我更喜欢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
对象,但总是可以获取字符串,如果这是您的第三方库所期望的那样:
>>> str(p.with_suffix('.xlsx'))
'/path/to/my_file.xlsx'
答案 1 :(得分:0)
而不是basename()
使用base = os.path.splitext(csvfile)[0]