1

Windows で python を使用すると、同じフォルダーにある複数のファイルの名前を一度に変更しようとしていますが、リストを使用して名前を変更することはできないため、コードを試すときにこのエラーが発生します。

os.rename(dirlist[1], words[1]) WindowsError: [エラー 2] 指定されたファイルが見つかりません

サンプルコードは次のとおりです。

import os
import sys
words = os.listdir('C:/Users/Any/Desktop/test')
dirlist = os.listdir('C:/Users/Any/Desktop/test')

words = [w.replace('E', 'e') for w in words]
print words 

os.rename(dirlist[1], words[1])

私が達成しようとしているのは、選択したフォルダーで python スクリプトを実行すると、スクリプトがそこにあるすべてのファイルを取得し、それらのすべての名前を変更することです。しかし、リストに添付されているため、フォルダー名を特定して名前を変更することができない場合は、注意が必要です。

4

2 に答える 2

4

os.listdirベース名の結果のみを返します。フルパスではありません。現在の作業ディレクトリには存在しません。それらをルートで結合する必要があります。

root = 'C:/Users/Any/Desktop/test'
for item in os.listdir(root):
    fullpath = os.path.join(root, item)
    os.rename(fullpath, fullpath.replace('E', 'e'))

アップデート

より多くの置換を実行する方法についてのコメントに応えて、 と を使用できることを提案translatemaketransました。

dict とソース文字列から始めましょう。

d = {'E': 'e', 'a': 'B', 'v': 'C'}
s = 'aAaAvVvVeEeE'

まず、非常に原始的で初心者レベルのアプローチの例を示しましょう。

for old, new in d.iteritems():
    s = s.replace(old, new)

print s
# BABACVCVeeee

この例では、辞書をループして、置換を複数回呼び出します。それは機能し、単純な構文を使用して完全に理にかなっています。しかし、すべての文字列に対して辞書をループして、replace を複数回呼び出さなければならないのはちょっと面倒です。

これを行うには他にも多くの方法があると思いますが、別のアプローチは、変換テーブルを一度作成し、それをすべての文字列に再利用することです。

import string

old, new = zip(*d.items())
print old, new
# ('a', 'E', 'v') ('B', 'e', 'C')

old_str, new_str = ''.join(old), ''.join(new)
print old_str, new_str
# aEv BeC

table = string.maketrans(old_str, new_str)

print s.translate(table)
# BABACVCVeeee

これにより、辞書がキーと値のタプルに分割されます。次に、イントロ文字列を結合して に渡しmaketransます。これにより、テーブルが返されます。一度だけ行う必要があります。これでテーブルができたので、それを使用して任意の文字列を翻訳できます。

于 2012-08-11T18:41:19.707 に答える
1

エラーが発生するのは、現在の作業ディレクトリが を指していないためです。'C:/Users/Any/Desktop/test'デフォルトでc:\python27は、Python 2.7 を使用している場合は を指していos.getcwd()ます'C:/Users/Any/Desktop/test'

os.chdir()現在の作業ディレクトリを変更するために使用します。

import os
import sys
words = os.listdir('C:/Users/Any/Desktop/test')
dirlist = os.listdir('C:/Users/Any/Desktop/test')

words = [w.replace('E', 'e') for w in words]
print words 

os.chdir('C:/Users/Any/Desktop/test')  #this changes the current working directory
os.rename(dirlist[1], words[1])
于 2012-08-11T18:50:52.080 に答える