2014-11-03 5 views
0

이것은 알 수 있듯이 매우 까다 롭습니다. 파일 확장명을 자동으로 감지하는 방법은 무엇입니까?자동으로 파일 확장자를 감지

txt_files = glob('*txt') 
png_files = glob('*.png') 
jpg_files = glob('*.jpg') 
zip_files = glob('*.zip') 
gif_files = glob('*.gif') 
iso_files = glob('*iso') 
epub_files = glob('*epub') 
ico_files = glob('*.ico') 

#Unimportant bit to question 

for n in txt_files: 
    move_files(n, 'txt') 
for n in png_files: 
    move_files(n, 'png') 
for n in jpg_files: 
    move_files(n, 'jpg') 
for n in zip_files: 
    move_files(n, 'zip') 
for n in gif_files: 
    move_files(n, 'gif') 
for n in iso_files: 
    move_files(n, 'iso') 
for n in epub_files: 
    move_files(n, 'epub') 
for n in ico_files: 
    move_files(n, 'ico') 
+0

일부 확장 프로그램에'.'이있는 이유가 있습니까? – abarnert

답변

3

move_files 단계를 건너 때문에이 "자동 감지"되어 어떤 의미에서

무엇인지 명확 단지 모든 파일을 통해 이동과 확장을보고 : 당신의 "확장"중 일부는 실제로는 확장하지 않은 경우이 작동하지 않습니다

for f in os.listdir(): 
    name, ext = os.path.splitext(f) 
    ext = ext.lstrip('.') 
    if ext: 
     os.mkdirs(ext) 
     move_file(filename, ext) 

하는 것으로. 나는 기존 코드가 및 *iso과 같은 것을 검색하는데 이는 물론 this_is_not_txtspam.aniso 등과 같은 것들과 일치 할 것입니다. 이것이 버그가 아닌 필수 기능이라면 코드에서 구현하기 전에 "확장"이 의미하는 바를위한 몇 가지 규칙을 마련해야합니다 ...

또한 확장명이없는 파일 (if ext:), 빈 확장자 (단지 .)의 파일도 마찬가지입니다 (lstrip 이후에 if 검사가 수행되기 때문에). 물론 원하는 경우 이들 중 하나를 변경할 수 있습니다 (가능한 실제 확장명과 모호 할 수없는 하위 디렉토리 이름이 필요합니다).

마지막으로 "double extensions"을 처리하지 않습니다. 예를 들어, .tar.gz.gz과 같은 디렉토리에 있습니다. 다시 말하지만, 원하는 경우 변경할 수 있습니다.

+1

아마 "." 확장자는 무시됩니다. – martineau

+0

@martineau : OK, 필요한 것은 아닌지 잘 모르겠지만 추가했습니다. 감사합니다. – abarnert

0
for ext in "txt png jpg zip gif iso epub ico".split(): 
    for file in glob("*.%s"%ext): #if there are no files of this type it just skips it 
     move_files(file,ext) 

어쩌면? 이 아니, 질문 패턴에 맞게에 파일이없는 경우 "자동으로 새로운 확장을 감지"를

+0

"새 확장 프로그램을 자동으로 검색"하는 방법은 무엇입니까? 그것은 그가 이미 가지고있는 논리를 작성하는 더 단순한 방법 일뿐입니다 (단'txt'에만'*'를 포함 시켰습니다). – abarnert

+0

그래, 나는 그가 그 진술에 의해 의미하는 것을 모른다. .. 나는 그의 진술을 방금 말하고 있었다. "당신이 볼 수있는 것에 따라, 이것은 매우 매우 가볍게 졸었다. (나는 그가 clunky ...을 의미했다고 생각하지만 그는 그 clunky 얼마나 구체화하지 않습니다) –

+1

네 말이 맞아, 조금 모호합니다. 나는 그가이 코드를 정리하기를 원한다고 말하고, 이동 후에 남아있는 확장을 감지하기 위해 마지막에 여분의 코드를 작성한다 (예 :'unexpected_extensions = {os.path.splitext (f) [1] for os.list.dir()에있는 os.path.isfile (f)}')? – abarnert

관련 문제