6

私はこれに何時間も苦労してきましたが、解決策を見つけましたが、好きではありません。これを解決する組み込みの方法はありますか:

パスを含む変数を使用してWindowsを使用しています。それを使用してファイルを開こうとしていますが、実行時まで判断できないエスケープ文字が含まれています。

「shutil」を使用して実行する場合: shutil.copy(file_path, new_file_path)

それは正常に動作します。

ただし、同じパスを使用しようとすると、次のようになります。

f = open(file_path, encoding="utf8")

パスの '\a' が 'Bell' = 7 として読み取られるため、機能しません

これらすべてを試してみましたが、機能するようになったのはカスタム関数「reconstruct_broken_string」だけです。

    file_path = "F:\ScriptsFilePath\addons\import_test.py"

    print(sys.getdefaultencoding())
    print()
    print(file_path.replace('\\', r'\\'))
    print( '%r' % (file_path))
    print( r'r"' + "'" + file_path+ "'")
    print(file_path.encode('unicode-escape'))
    print(os.path.normpath(file_path))
    print(repr(file_path))

    print()
    print(reconstruct_broken_string(file_path))


backslash_map = { '\a': r'\a', '\b': r'\b', '\f': r'\f',
                  '\n': r'\n', '\r': r'\r', '\t': r'\t', '\v': r'\v' }
def reconstruct_broken_string(s):
    for key, value in backslash_map.items():
        s = s.replace(key, value)
    return s

印刷物は次のとおりです。

utf-8

F:\\ScriptsFilePathddons\\import_test.py
'F:\\ScriptsFilePath\x07ddons\\import_test.py'
r"'F:\ScriptsFilePathddons\import_test.py'
b'F:\\\\ScriptsFilePath\\x07ddons\\\\import_test.py'
F:\ScriptsFilePathddons\import_test.py
'F:\\ScriptsFilePath\x07ddons\\import_test.py'

F:\ScriptsFilePath\addons\import_test.py

この関数ではなく、これを行う組み込みの方法はありますか? 「open」ではなく「shutil」で機能するのはなぜですか

ありがとう

4

5 に答える 5

0

これは、「repr」が正しく機能しない方法を示す単純化されたバージョンです。

file_path = "F:\tab\a_bell\newline.py"
print(file_path)
print(repr(file_path))

これは以下を出力します:

F:  ab_bell
ewline.py

and

F:\tab\x07_bell\newline.py'

ご覧のとおり、'repr' は escape-tab や escape-newline などで機能しますが、エスケープ ベルである '\a' では機能しません。

これは 'repr' のバグですか? プログラマーが「reconstruct_broken_string(s)」のようなカスタム関数を作成する必要がない、この問題に対する組み込みのソリューションはありますか? そうでない場合、どのようにしてpythonがこの不自由になることができますか?

于 2013-09-08T19:44:28.277 に答える
0

私はまったく同じ問題を経験しました - 試してみpath = 'C:\temp\importfile.xlsx'ましたが、エラーが発生し続けました"No such file or directory: 'C:\\Temp\\importdata.xlsx'"。代わりにスラッシュを使用すると、インポートが機能しました。試しましたfile_path = "F:/ScriptsFilePath/addons/import_test.py"か?

于 2013-12-20T15:35:31.263 に答える