2013-08-08 5 views
0

에서 동시에 여러 파일 확장자를 삭제할 수 있습니다 (예를 들어, 패턴 = ('가 .txt'또는 '이 .doc') 여러 확장 기능을 추가 할 수있는 방법이 있나요내가 파이썬

import os, fnmatch 
def find_files(directory, pattern): 

    for root, dirs, files in os.walk(directory): 

     for basename in files: 
      if fnmatch.fnmatch(basename, pattern): 
       filename = os.path.join(root, basename) 

       yield filename 

def find_files_to_list(directory, pattern): 

wanted_files = find_files_to_list('/original_project/', '*.html') 

for filename in find_files('/copy_project/', '*'): 

    if filename not in wanted_files: 
     os.remove(filename) 

    file_list = [] 
    for root, dirs, files in os.walk(directory): 
     for basename in files: 
      if fnmatch.fnmatch(basename, pattern): 
       filename = os.path.join(root, basename) 
       file_list.append(filename) 

    return file_list 

wanted_files = find_files_to_list('/original_project/', '*.html') 

for filename in find_files('/copy_project/', '*'): 

    if filename not in wanted_files: 
     os.remove(filename) 

답변

3

그것은 당신처럼 보인다 단지 그것을 부정,? 아니,

if filename.endswith(('.txt','.doc')): 
    os.remove(filename) 

을 기본 문자열 작업을 원하거나

if not filename.endswith('.html'): 
    os.remove(filename) 

0 * '들이게 위의 프로그램 내가 확장자를 가진 파일을 유지하고 있습니다에서

if not filename.endswith(('.html','.txt')): 
    os.remove(filename) 
+0

: 당신 .html로하고 .txt 인 확장을 계속하고 싶어 그래서 만약은 어떤 일치하는 경우 True를 반환, 당신에 대해 일치 할 것들의 튜플을 받아 '하지만 같은 프로그램에'* .txt '라고 덧붙일 수는 없습니다. 논리는 필요한 파일을 유지하고 나머지는 삭제하는 것입니다. – user2661518

+0

좋아, 그래서 논리를 뒤집기 ... – roippi

+0

나는 파일과 폴더의 무리와 디렉토리를 가지고 있기 때문에 나는 할 수 없습니다. 따라서 os.listdir을 사용하면 하위 폴더의 파일은 삭제되지 않습니다. 그리고 os.walk를 사용하면 같은 형식으로 다시 복사 할 수 없습니다. 그래서 내가 원하는 것을 지키고 쉬는 것이 쉬울 거라 생각했지만 위의 문제에 부딪쳤다. – user2661518