2

私のスクリプトは、それが含まれているディレクトリを検索し、見つかったファイル名を使用して新しいディレクトリを作成し、それらをそのディレクトリに移動します:John-doe-taxes.hrb-> John-doe/John-does-taxes.hrb。umlaut文字に遭遇するまでは正常に動作し、ディレクトリが作成され、ファイルが見つからないことを示す「エラー2」が返されます。私はプログラミングにかなり慣れていません、そして私が見つけた答えは追加することでした

coding: utf-8

動作しないファイルへの行コードでウムラウトを使用していないため、ウムラウトファイルを処理していると思います。私が興味を持ったのは、この問題はウムラウトやその他の特殊文字でも発生するのでしょうか。これは私が使用しているコードです、私は提供されたアドバイスに感謝します。

import os
import re
from os.path import dirname, abspath, join


dir = dirname(abspath(__file__))
(root, dirs, files) = os.walk(dir).next() 
p = re.compile('(.*)-taxes-') 
count = 0
for file in files:
    match = p.search(file)
    if match:
        count = count + 1
        print("Files processed: " + str(count))
        dir_name = match.group(1) 
        full_dir = join(dir, dir_name)
        if not os.access(full_dir, os.F_OK):
            os.mkdir(full_dir)
        os.rename(join(dir, file), join(full_dir, file)) 
raw_input()
4

2 に答える 2

1

考慮すべきことの1つは、Python3を使用することです。Python3は、デフォルトとしてUnicodeをネイティブでサポートしています。上記のコードを機能させるために何かを変更する必要があるかどうかはわかりませんが、Python2コードをPython3に移行するためのPythonスクリプトが例に含まれています。

申し訳ありませんが、Python2についてはお役に立てません。同様の問題が発生し、プロジェクトをPython3に移行しました。最終的には少し簡単になりました。

于 2013-03-18T02:08:01.300 に答える
1

あなたの問題は、システムエンコーディングにないstrs を渡すことだと思います。os.renameファイル名がASCII文字のみを使用している限り、これは機能しますが、その範囲外では問題が発生する可能性があります.

最善の解決策は、おそらくユニコードで作業することです。Unicode 引数を指定した場合、ファイルシステム関数は Unicode 文字列を返す必要があります。 openUnicode ファイル名を持つ Windows で正常に動作するはずです。

もしあなたがそうするなら:

dir = dirname(abspath(unicode(__file__)))

次に、全体でユニコード文字列を操作する必要があります。

于 2013-03-18T05:03:55.657 に答える