Znak ucieczki Pythona
Przez wiele godzin walczyłem z tym i chociaż znalazłem rozwiązanie, nie podoba mi się to. Czy istnieje sposób na rozwiązanie tego problemu:
Jesteś w systemie Windows ze zmienną zawierającą ścieżkę. Próbujesz otworzyć z nim plik, ale zawiera on znaki ucieczki, których nie możesz określić do czasu wykonania.
Jeśli używasz „zamknij” i wykonaj:shutil.copy(file_path, new_file_path)
To działa dobrze.
Ale jeśli spróbujesz użyć tej samej ścieżki z:
f = open(file_path, encoding="utf8")
Nie działa, ponieważ „a” na ścieżce jest odczytywane jako „Bell” = 7
Próbowałem wykonać wszystkie te czynności, ale jedyną rzeczą, którą udało mi się uruchomić, jest niestandardowa funkcja „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
Oto wydruk:
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
Czy istnieje wbudowany sposób, aby to zrobić zamiast tej funkcji? Dlaczego działa z „shutil”, a nie „open”
Dzięki