2017-12-06 25 views
0

ファイルがname.csv.xlsxではなくname.xslxとして保存されるように.csv拡張子を削除しようとしていますが、これは機能していないようです。私はいくつかの助けに感謝します。ありがとうございました。forループ内の拡張子の削除

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

'basename'は' os.path.split'の2番目の項目です。 'os.path.splitext'を使用します。 –

+0

テキストスライス' "filename.csv" [: - 4] 'を使用します。 – furas

答えて

0

代わりbasename()使用のbase = os.path.splitext(csvfile)[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' 
関連する問題