2013-05-24 17 views
14

特定のフォルダ内のファイルの拡張子を変更したいと思います。私はフォーラムでこのトピックについて読んでいます。アイデアを使用して、私は次のコードを書いて、それは動作すると思っていますが、そうではありません。私は間違いを見つけるための指導に感謝します。Pythonのフォルダ内のファイルのファイル拡張子を変更する

import os,sys 
    folder = 'E:/.../1936342-G/test' 
    for filename in os.listdir(folder): 
      infilename = os.path.join(folder,filename) 
      if not os.path.isfile(infilename): continue 
      oldbase = os.path.splitext(filename) 
      infile= open(infilename, 'r') 
      newname = infilename.replace('.grf', '.las') 
      output = os.rename(infilename, newname) 
      outfile = open(output,'w') 
+3

どのようにそれが動作しません。またglobモジュールを使用することを検討してください?ファイルの名前は変更されませんか?エラーメッセージはありますか? – dbr

+0

お返事ありがとうございます。さて、 'output = os.rename(infilename、newname)'の行で停止します。 – user2355306

+0

停止するだけですか?出力なし? – glglgl

答えて

17

openを.TEXTするの.txtで終わる実行ディレクトリ内のすべてのファイルの名前を変更しますos.renameが唯一の送信元と宛先を必要とするので、不要ですジョブを完了させるためのパス。また、os.renameは常にNoneを返すので、戻り値としてopenを呼び出すことは意味がありません。

import os,sys 
folder = 'E:/.../1936342-G/test' 
for filename in os.listdir(folder): 
     infilename = os.path.join(folder,filename) 
     if not os.path.isfile(infilename): continue 
     oldbase = os.path.splitext(filename) 
     newname = infilename.replace('.grf', '.las') 
     output = os.rename(infilename, newname) 

私は単純に2つを削除しましたopen。これがあなたに役立つかどうかを確認してください。

+0

ありがとう、私は行の位置を変更していただきありがとうございます、それは続行しますが、 'outfile = open(出力、' w ')' – user2355306

+0

@ user2355306 'os.rename'は返されないようです。ファイルパス – chenaren

+0

置き換えが正しくありません。たとえば、ファイル名がSmth.grform.grf、@elyaseの回答が良い場合があります。 –

10

このような何かは、ソースファイルに

import os, sys 

for filename in os.listdir(os.path.dirname(os.path.abspath(__file__))): 
    base_file, ext = os.path.splitext(filename) 
    if ext == ".txt": 
    os.rename(filename, base_file + ".text") 
+0

ご指摘いただきありがとうございます。このコードを使用すると、実行中のプロセスは最後の行に「システムはデータを見つけることができません」というエラーを表示し、理由は何ですか? – user2355306

+0

ご指摘いただきありがとうございます。このページで他の推奨コードと同様に役立ちます。私はスクリプトの新しい方法を学びました。 – user2355306

10

名前を変更するためにファイルを開く必要はありません。os.renameにはパスのみが必要です。

import glob, os 

for filename in glob.iglob(os.path.join(folder, '*.grf')): 
    os.rename(filename, filename[:-4] + '.las') 
+0

ご指摘いただきありがとうございます。 – user2355306

+0

@ user2355306、喜んで助けてください。 – elyase

+0

この目的のために新しいスクリプト方法を教えていただきありがとうございます。 – user2355306

0
#!/usr/bin/env python 

''' 
Batch renames file's extension in a given directory 
''' 

import os 
import sys 
from os.path import join 
from os.path import splitext 

def main(): 
    try: 
     work_dir, old_ext, new_ext = sys.argv[1:] 
    except ValueError: 
     sys.exit("Usage: {} directory old-ext new-ext".format(__file__)) 

    for filename in os.listdir(work_dir): 
     if old_ext == splitext(filename)[1]: 
      newfile = filename.replace(old_ext, new_ext) 
      os.rename(join(work_dir, filename), join(work_dir, newfile)) 


if __name__ == '__main__': 
    main() 
関連する問題