2009-12-14 4 views
0

그것은 "How to make a valid Windows filename from an arbitrary string?"에서 영감을 얻었습니다. 임의의 문자열을 취하여 유효한 파일 이름으로 만드는 함수를 작성했습니다.내 makeValidFilename 함수에 잠재적 인 오류가 있습니까?

내 기능은 기술적으로이 질문에 대한 답변이어야하지만 답변으로 게시하기 전에 내가 바보 같은 짓을했는지 또는 간과 한 적이 있는지 확인하고 싶습니다. 소스 파일 이름이 유효한 파일이어야합니다 동안, 시리즈 이름이 수정됩니다 - 에피소드 http://www.thetvdb.com에서 가져온로, TV 에피소드 파일 이름을 소요하고 좋은 일관 이름을 변경하는 유틸리티 -

나는이 tvnamer의 일환으로 썼다 그리고 에피소드 이름 - 둘 다 이론적으로 모든 문자를 포함 할 수 있습니다. 나는 유용성과 같은 보안에 대해 많이 걱정 아니에요 - 그것은 .some.series - [01x01].avi하고 그것은 몇 가지 가정을 만드는

(악한 사람을 방해하기보다는) "사라"파일 이름이 변경되는 파일을 방지하기 위해 주로이다 :

  • 을 파일 시스템은 유니 코드 파일 이름을 지원합니다. HFS +와 NTFS는 모두 대다수의 사용자를 대상으로합니다. 유니 코드 문자를 제거하는 normalize_unicode 인수 (tvnamer으로는,이는 구성 XML 파일을 통해 설정)
  • 이 플랫폼은 하나 다윈, Linux 및 다른 모든 윈도우로 취급되고도있다
  • 은 파일 이름에 의도 수 표시 (.bashrc 같은 아닌 dotfile) -

것들 내가 (희망) 처리 한을 원하는 경우는, .abc 형식의 파일 이름을 허용하도록 코드를 수정하는 정도로 간단 할 것이다 :

  • 앞에 추가의 underscor \/:*?"<>| (Windows에서, 또는 강제 제거 OS X
  • 에 리눅스에 //: 유효하지 않은 윈도우 파일 이름 문자 : 전자는 파일 이름은 .로 시작하는 경우
  • 제거 디렉토리 분리 (사라지고에서 파일 이름 ... 파일을 방지)) windows_safe=True
  • 앞에 추가는 NUL_NUL 등)의
  • 옵션 정상화되고, (COM2_COM2하게 밑줄 파일 이름을 예약 유니 코드 데이터, 그래서 åa 및 비 convertable 문자가 될 수

윈도우에 리눅스/다윈에 255 자, 32 자 이상의 코드와 테스트 케이스의 무리를 파일 이름의

  • 자르기를 제거된다 발견하고 http://gist.github.com/256270에 fiddled. "생산"코드를 찾을 수 있습니다 in tvnamer/utils.py

    이 함수에 오류가 있습니까? 내가 놓친 조건들?

  • 답변

    1

    한 가지주의 사항 : NTFS에서는 특정 디렉토리에 일부 파일을 만들 수 없습니다. E.G. $ 루트로 부팅