Python

2013-05-24 2 views
14

'daki bir klasördeki dosya uzantısı için dosya uzantısını değiştirme Belirli bir klasördeki dosyaların uzantısını değiştirmek istiyorum. forumda bu konu hakkında okudum. kullanarak fikir yapar, aşağıdaki kodu yazdım ve bunun işe yarayacağını umuyorum ama yapmaz. Hatamı bulmak için herhangi bir rehberlik için minnettar olurdum. os.rename sadece kaynak ve hedef ihtiyacı beri böylePython

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

ne şekilde ise çalışmıyor: Ayrıca glob modülü kullanarak düşünün? Dosyalar yeniden adlandırılmıyor mu? Herhangi bir hata mesajı var mı? – dbr

+0

Cevabınız için teşekkür ederiz. Eh, 'output = os.rename (infilename, newname)' satırında durur ' – user2355306

+0

Sadece durur? Herhangi bir çıkış olmadan? – glglgl

cevap

17

kaynak dosyada open gereksizdir .text için .txt sona infaz dizindeki tüm dosyaları yeniden adlandırmak olacak işi bitirmek için yollar. Ayrıca, os.rename her zaman None değerini döndürür, bu nedenle dönüş değeri open'u aramak mantıklı değildir.

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) 

İki open'u kaldırdım. Bunun sizin için uygun olup olmadığını kontrol edin.

+0

Teşekkür ederim, tavsiye ettiğin gibi, çizginin konumunu değiştirdim, devam ediyor ama yine de 'outfile = open (output,' w ')' satırında sotck yapardı ' – user2355306

+0

@ user2355306 'os.rename' geri dönmüyor dosya yolu. – chenaren

+0

değiştir, örneğin, dosya adı Smth.grform.grf olabilir, @elyase cevap daha iyi olabilir –

10

şey,

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

Yardımlarınız için teşekkür ederiz. Bu kodu kullanarak, koşma süreci son satırdaki stok hararetini hatayı 'hata ile sistemde bulamıyor' nedenini ne olurdu? – user2355306

+0

Rehberliğiniz için çok teşekkür ederim, şimdi güzelce yazabilirsiniz. Kodunuz, bu sayfadaki diğer tüm önerilen kodlar gibi yardımcı olur. Yeni bir senaryo yazmayı öğrendim. – user2355306

10

Dosyaları yeniden adlandırmak için açmanıza gerek yok, os.rename yalnızca kendi yollarına ihtiyaç duyar.

import glob, os 

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

Rehberlik için çok teşekkür ederim çok güzel şimdi yazabilir. – user2355306

+0

@ user2355306, yardım etmekten memnun. – elyase

+0

Bu amaç için bana yeni bir betik yolunu gösterdiğiniz için teşekkür ederiz. – 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()