필자는 알려지지 않은 많은 파일을 다루었으며 필자가 파이썬을 배우면서 필자가이 파일들을 필터링/정렬하고 다룰 수 있도록 도와주었습니다.Mac OS에서 Windows 환경에서 비 ASCII 문자로 파일 이름을 만들었습니까?
많은 리소스 포크가있는 컬렉션에서 찾을 수있는 작은 스크립트를 작성하고 삭제합니다 (다음 단계는 그들을 찾아 이동하는 것이지만 다른 날은 그 다음 단계입니다).
이 컬렉션에서 파일 이름에 비 ASCII 문자가있는 파일이 있으며 os.delete 기능을 사용하고있는 것 같습니다.
예 파일 이름 : ._spec COM 보고서 395 (NB 3과 그 아래 작은 점을 가지고, 내가 예를 찾거나 파일 이름의 진수를 보여주기 위해 방법을 알아낼 수 없습니다 ...)
모든 파일 이름을 기록했습니다.이 파일에 대한 해당 로그 레코드는 다음과 같습니다. .spec com report 3? 95
오류는 파일을 찾을 수 없기 때문에 windowserror입니다 파일이 Windows OS에 의해 알려진 파일이 아닙니다.) 나는 try 절을 사용하여 rounf를 처리 할 수있게했지만 정말 제대로 처리하려고합니다.
은 또한이 게시물 당 ('.'U)를 걸어 옵션에`os.walk을 유니 코드 스위치를 사용하여 시도 : Handling ascii char in python string (위 답) 나는 다음과 같은 오류 참조 : 그래서Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "c:\python27\lib\encodings\cp850.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\uf022' in position
20: character maps to <undefined>
을 나는 ... 대답은 파일 이름 구문 분석하는 방법으로 거짓말을 추측하고, 사람이 올바른 방향으로 나를 지적 할 수있을 경우 궁금
코드 :
import os
import sys
rootdir = "c:\target Dir to walk"
destKeep = "Keepers.txt"
destDelete = "Deleted.txt"
matchingText = "._"
files_removed = 1
for folder, subs, files in os.walk(rootdir):
outfileKeep = open(destKeep,"a")
outfileDelete = open(destDelete,"a")
for filename in files:
matchScore = filename.find(matchingText)
src = os.path.join(folder, filename)
srcNewline = src + ", " + str(filename) + "\n"
if matchScore == -1:
outfileKeep.writelines(srcNewline)
else:
outfileDelete.writelines(srcNewline)
try:
os.remove(src)
except WindowsError:
print "I was unable to delete this file:"
outfileKeep.writelines(srcNewline)
files_removed += 1
if files_removed:
print '%d files removed' % files_removed
else :
print 'No files removed'
outfileKeep.close()
outfileDelete.close()
이봐, 답장을 보내 주셔서 감사합니다. 나는 당신이 말한 것을 대부분 이해하고 당신의 제안을 가지고 노려왔다. 나는 아직도 그것을 작동시킬 수 없다. - 나는 문제를 이해하는데 조금 더 가깝다고 생각한다. OS 계층이 MSDOS 기반 함수들이 어떻게 작동하는지와 다른 파일 이름을 다루는 방법 인 것 같다. 파일명. 기본적으로 탐색기가 볼 수 있지만 MSDOS를 벗겨 내고 마스킹 한 파일 이름 (알 수없는 인코딩의)에는 2 바이트 문자가 있습니다. 이 캐릭터의 전달이 문제인 것 같습니다. 아마도 문자열이 아닌 비트 스트림을 살펴야 할 것입니다. – Jay
나는 시도하고 설명하기위한 빠른 스크린 샷을 만들었다 : http://imgur.com/kBVSa – Jay
나는 또한 문제의 도형이 ASCII 번호와 EF 80 A2의 16 진수 코드로 구성되어 있음을 발견했다. firefox에서 폴더를보고 소스를 보면이 사실을 알게되었습니다.흥미로운 점은 몇 가지 숫자에 대한 숫자 상형 문자를 볼 수 있다는 점입니다. 각 문자는 다음과 같은 코드를 사용하여 문자 (UTF-16)의 4 바이트 단어를 제안합니다. – Jay