os.rename добавляет дополнительный символ при переименовании чего-либо с символом utf - PullRequest
1 голос
/ 23 октября 2019

Это первый раз, когда я задаю вопрос по stackoverflow, поэтому дайте мне знать, если я что-то не так делаю.

Я пытаюсь переименовать файл с помощью библиотеки os. Я хочу, чтобы имя файла включало некоторые не-ascii символы в строку, которую я сгенерировал. Вот код:

for subdir, dirs, files in os.walk(startDir):
    for file in files:
        # some code to generate the newFileName string

        os.rename(os.path.join(subdir,file), s.path.join(subdir,newFileName))

Вот пример того, какой будет строка newFileName: "te © st © .txt"

Однако, когда файл сохраняется, он добавляет дополнительный символ: "test. .txt"

Из другого прочтения, которое я сделал, звучит так, будто utf-8 на самом деле отображает определенные коды в два символа или что-то в этом роде, и именно отсюда и происходит. Если я печатаю строку прямо перед вызовом os.rename, она печатает на терминал так, как я ожидаю. Я предполагаю, что это должно быть связано с тем, как os.rename взаимодействует с файловой системой.

Я использую Windows.

1 Ответ

0 голосов
/ 23 октября 2019

Возможно, вы можете попробовать использовать Unicode полностью?

path = u'99 bottles of \N{greek small letter beta}eer on the wall.txt'
f = open(path, 'w')
f.write('Hello, World!\n')
f.close()
import glob
print(glob.glob(path)) # ['99 bottles of βeer on the wall.txt']
import os
print(os.path.getsize(path)) # 15
...