2011-01-20 6 views
0

ファイル名に '。'が含まれていると、スローしてエラーが発生するスクリプトを実行しています。または '+'でそれは、私はすべての 'を置き換えるスクリプトを作成しようとしています。 '_'は '+'を置き換えて正常に動作します。しかし、 '。'私はファイルを分割しないと、私のファイルはすべて削除されます!だから私はファイルを分割しようとしましたが、今はスクリプトが実行されていると言われていますが、すべての '。' 'sはまだそこにあります!ここファイル名内で検索して置換します。

は私のスクリプトです:

folder = "C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1" 

import glob, os 
for filename in glob.glob(os.path.join(folder, "*+*")): 
    os.rename(filename, filename.replace('+','_')) 

for root, dirs, filenames in os.walk(folder): # returms root, dirs, and files 
    for filename in filenames: 
     filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1]) 
     filename_zero = filename_split[0] 
     extension = str.upper(filename_split[1]) 
     for filename_zero in glob.glob(os.path.join(filename_zero, "*.*")): 
      os.rename(filename_zero, filename_zero.replace('.','_')) 

は、事前にありがとうございます!

答えて

1

私はあなたのコードのロジックを理解していません。 私はprint文を追加:

folder = "C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1" 

import glob, os 
for filename in glob.glob(os.path.join(folder, "*+*")): 
    print "I rename '+' to '_' in\n"+filename 
    os.rename(filename, filename.replace('+','_')) 


print '\n\n---- Now, there after, are the filenames in \n  '+folder 


for root, dirs, filenames in os.walk(folder): # returms root, dirs, and files 
    for filename in filenames: 
     print '\nfilename==',filename 
     filename_split = os.path.splitext(filename) # filename and extension name (extension in [1]) 
     filename_zero = filename_split[0] 
     extension = str.upper(filename_split[1]) 
     print 'filename_zero==',filename_zero 
     print 'os.path.join(filename_zero, "*.*")==',os.path.join(filename_zero, "*.*") 
     print 'glob.glob(os.path.join(filename_zero, "*.*"))==',glob.glob(os.path.join(filename_zero, "*.*")) 
     for filename_zero in glob.glob(os.path.join(filename_zero, "*.*")): 
      print ' filename_zero in glob.glob(os.path.join(filename_zero, "*.*")) ==',filename_zero 
      os.rename(filename_zero, filename_zero.replace('.','_')) 

そして、ここで結果

I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\+po.rt.hos.txt 
I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ar.am+is.doc 
I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ath+os.html 
I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\d'a.rtagn+an 
I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\dum+as.doc 
I rename '+' to '_' in 
C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1\ki.kiouili.do+c 


---- Now, there after, are the filenames in 
    C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1 

filename== ar.am_is.doc 
filename_zero== ar.am_is 
os.path.join(filename_zero, "*.*")== ar.am_is\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== arctic.txt 
filename_zero== arctic 
os.path.join(filename_zero, "*.*")== arctic\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== ath_os.html 
filename_zero== ath_os 
os.path.join(filename_zero, "*.*")== ath_os\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== atla.ntic.html 
filename_zero== atla.ntic 
os.path.join(filename_zero, "*.*")== atla.ntic\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== d'a.rtagn_an 
filename_zero== d'a 
os.path.join(filename_zero, "*.*")== d'a\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== dum_as.doc 
filename_zero== dum_as 
os.path.join(filename_zero, "*.*")== dum_as\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== ki.kiouili.do_c 
filename_zero== ki.kiouili 
os.path.join(filename_zero, "*.*")== ki.kiouili\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

filename== _po.rt.hos.txt 
filename_zero== _po.rt.hos 
os.path.join(filename_zero, "*.*")== _po.rt.hos\*.* 
glob.glob(os.path.join(filename_zero, "*.*"))== [] 

glob.glob(os.path.join(filename_zero、 ""))は常にあることを[] os.path.joinので(filename_zero、 "")は、ファイルの名前とパスではなく、その命令os.rename(filename_zero、filename_zero.replace(あります」。 '' _ '))は決して何もしません。

ところで、私は(1つのインデント少ないが)あなたは芋

for filename in os.listdir(folder): 
    if os.path.isfile(filename): 

以上で

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 

を交換することをお勧め

for filename in (f in os.listdir(folder) if os.path.isfile(f)): 

私は思いますあなたが取った道は難局です。私が正しく理解していれば、あなたがしたいことは、実際には、拡張子の前にファイル名の中のポイントと '+'を置き換えることです。つまり、拡張子と拡張子の間に区切りをつける点ファイル名、拡張子の '+'は使用できません。とにかく、拡張機能にポイントと '+'が付いているのはナンセンスです。

したがって、globを使用しようとします。しかし、人格的には、 '。'どのようにglobが本当にその目的のために採用されることができるのか分かりません。

だから私は別の方法を取らなければならないと思います。 ワイルドカードパターンと一致するすべてのファイル名を検証し、処理する必要のある良いファイル名のみを返すようにする代わりに、ファイル名のリストを反復して '+'と 'を置き換える必要があります。 '拡張前の部分にはい、ここにはポイントと '+'がないファイル名がありますが、それはプログラマーがやるべき無駄な仕事です。しかし、とにかく、同じ作業がグロブでシーンの後ろで実行されます。だから、仕事に逆らって仕事をするのですが、私は想像できるもの、つまりグロブのないものを作ることを好みます。

次のコードは短く、efficentソリューション

folder = "C:/Documents and Settings/DuffA/Bureaublad/shortcuts projects/klic01/11G008689_1" 

import os 
separ = os.sep 

for n in os.listdir(folder): 
    print n 
    if os.path.isfile(folder + separ + n): 
     filename_zero, extension = os.path.splitext(n) 
     os.rename(folder + separ + n , folder + separ + filename_zero.replace('.','_').replace('+','_') + extension) 

print '\n--------------------------------\n' 
for n in os.listdir(folder): 
    print n 

も結果

+po.rt.hos.txt 
ar.am+is.doc 
arctic.txt 
ath+os.html 
atla.ntic.html 
d'a.rtagn+an 
dum+as.doc 
ki.kiouili.do+c 

-------------------------------- 

arctic.txt 
ar_am_is.doc 
ath_os.html 
atla_ntic.html 
d'a.rtagn+an 
dum_as.doc 
ki_kiouili.do+c 
_po_rt_hos.txt 
+0

素晴らしい!そんなに良い答えをありがとう!私はまだ、サイトの誰もが役に立つと信じられないほど賢い人を乗り越えることができません! (明らかに私から離れて!)感謝!! –

1

なぜをos.walkループ内に使用​​していて、filename_zero変数も上書きしていますか?

for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1]) 
     filename_zero = filename_split[0] 
     extension = filename_split[1].upper() 
     if "." in filename_zero: 
      os.rename(filename_zero, filename_zero.replace('.','_')) 

(テストしていません)

+0

私はちょうどsortof私はすでに持っていたスクリプトと私が見つけたいくつかの他のコードのfrankenstineを作ってきたように思えます - 私がやろうとしているのは、exstensionからファイル名を分けて見つけ出して置き換えることです! –

+0

私はこれを今試してみます - ありがとう! –

+0

私はライン25(最終行)上のエラーを取得:C \t \t \t \t \t \tライン\tポジション\t トレースバックメッセージ\tファイル名:\ DocumentsとSettings \ DuffA \ Mijn documenten \ Renaming.py \t WindowsError:[エラー2]指定されたファイルが見つかりません –

関連する問題