1
이름에 유니 코드가 아닌 문자로 파일의 이름을 바꾸려고합니다.Python3 'ascii'코덱이 문자를 인코딩 할 수 없습니다.
import os
dir = b'/tr2'
for file_name in os.listdir(dir):
file_name = file_name.decode('utf8','replace')
print(file_name)
os.rename(file_name,'11.txt')
만이 이름을 인쇄,하지만 난 이름을 변경하려고 할 때, 나는 오류받을 수 : 나는 FILE_NAME의 값을 표시하고 작업하는 데 필요한 문제가 있었다
UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 11: ordinal not in range(128)
어떤 문제가 발생 했습니까? 'print (file_name)'(유니 코드를 처리 할 수없는 터미널로 유니 코드 데이터를 출력하려고 시도 할 때) 또는'os.rename (file_name, '11 .txt ')'에? 항상 _full_ 스택 추적을 포함하십시오. 또한 바이너리 파일 이름을 디코드 할 필요가 없습니다. os.listdir에 의해 반환 된'os.rename'에 전달하면 작동합니다. – mata
10 번째 줄의 이름 바꾸기와 함께 악보가 있습니다. os .rename (file_name, '11 .txt ') UnicodeEncodeError :'ascii '코덱은 문자'\ xf1 '을 위치 11에 인코딩 할 수 없습니다. 서수는 범위 (128)에 없습니다. 그리고 file_name = file_name.decode ('utf8', 'replace')를 제거하면 오류가 발생합니다. FileNotFoundError : [Errno 2] 해당 파일이나 디렉토리가 없습니다. b'01 Contrase \ xc3 \ xb1as.txt '-> '11 .txt ' –
Aaron
'os.rename()'은 현재 디렉토리에 상대적으로 작동하며,'os.listdir()'에 의해 반환 된 파일은 주어진 경로 ('dir = b'/ tr2 '')에 상대적입니다. FileNotFoundError를 얻는다. file_name을 디코딩하지 않고'os.rename (os.path.join (dir, file_name), os.path.join (dir, b'11.txt '))'을 시도하십시오. – mata