def escapeName(self, name: str) -> str:
name = name.strip() # 앞 뒤 공백 제거
not_allow = (
[".", ".."] + # 현재 폴더, 상위 폴더
["CON", "AVX", "NUL", "PRN"] + # Windows 예약어
["con", "avx", "nul", "prn"] + # Windows 예약어
["COM" + str(i) for i in range(0, 10)] + # Windows 예약어 COM0 ~ COM9
["com" + str(i) for i in range(0, 10)] + # Windows 예약어 COM0 ~ COM9
["LPT" + str(i) for i in range(0, 10)] + # Windows 예약어 com0 ~ com9
["lpt" + str(i) for i in range(0, 10)] # Windows 예약어 lpt0 ~ lpt9
)
allow = (
["·", "··"] +
["CON", "AVX", "NUL", "PRN"] +
["con", "avx", "nul", "prn"] +
["COM" + str(i) for i in range(0, 10)] +
["com" + str(i) for i in range(0, 10)] +
["LPT" + str(i) for i in range(0, 10)] +
["lpt" + str(i) for i in range(0, 10)]
)
for idx, each in enumerate(not_allow):
if name == each:
return allow[idx]
# 파일명 끝이 마침표로 끝나는 경우
if name.endswith("."):
name = name[:-1] + "·"
return (name.replace("\\", "/") # 백슬러시
.replace("/", "/") # 슬러시
.replace(":", ":") # 콜론
.replace("*", "*") # 애스터리스크
.replace("?", "?") # 물음표
.replace("\"", """) # 큰따옴표
.replace("<", "<") # 부등호
.replace(">", ">") # 부등호
.replace("|", "|")) # 파이프
Just a moment...
위 목록을 참고하여 만들었다.
파일명의 앞뒤 공백을 제거하고, 만약 파일명이 예약어와 일치하면 비슷한 다른 문자로 변환, 그 외 사용 불가 문자는 모두 같은 모양의 전각 문자로 바꾼다.
물론 가장 좋은 방법은 저런 문자가 안들어가게 파일이름이 지어지도록 하는거지만…
참고록 COM0~COM9와 LPT0~LPT9는 Windows 11에서 테스트 해봤는데 잘 된다. 다만 아래 버전에서는 안 될 수 있으므로 추가해두었다.
댓글