Python이 백그라운드에서 각종 압축 파일을 자동으로 압축 해제하는 실현 방법

1. 요구 사항 설명
Python 프로그램을 작성하여 압축 팩 형식의 파일을 다운로드할 때마다 자동으로 내부 파일을 현재 폴더로 압축 해제한 후 압축 패키지를 삭제합니다. 이 사례를 통해 배울 수 있는 지식:
  • os모듈 종합 응용
  • glob 모듈 종합 응용
  • gzip zipfile rarfile tarfile 모듈을 이용하여 파일을 압축합니다
  • 2. 단계별 분석 및 선행 지식
    코드 코드 이전에 복잡한 문제를 여러 가지 명확한 요구로 해석해야 한다. 즉, 이 프로그램이 실현하는 논리는 다음과 같다.
  • 어떤 폴더 (예를 들어 다운로드 폴더) 에 압축 파일이 있는지 정시적으로 검사합니다
  • 새로 나온 압축 파일이 있으면 현재 폴더에 있는 새 폴더로 압축을 풀고 압축 파일을 삭제합니다
  • 압축 파일은 압축 형식에 따라 다음과 같은 4가지가 있습니다.
  • 압축 파일의 경우 다음과 같은 4가지 유형으로 압축 형식에 따라 다릅니다.
    .gz: 즉 gzip, 보통 파일 하나만 압축할 수 있습니다
    .tar:본질적으로 압축 도구가 아니라 포장 도구입니다. 따라갈 수 있습니다.gz 협조 형성.tar.gz의 압축 압축 형식입니다.zip:및.tar.gz는 유사하지만 여러 파일을 압축할 수 있습니다
    .rar: 압축 파일 패키지, DOS용 최초
    따라서 파일이 압축된 파일인지 아닌지에 대한 판단 논리는 다음과 같습니다.
  • 압축 패키지 접미사를 포함하는 목록 만들기compressed_lst = ['gz', 'tar', 'zip', 'rar']
  • 대상 폴더 아래의 모든 파일 이름이 filename을 실행합니다.split(.)[-1] 접두사 이름을 가져옵니다
  • 접두사 이름이compressed_인지 판단lst에 존재하면 후속 압축 해제 코드를 실행합니다
  • gz로 끝난 파일이라면 압축을 풀고 다시 판단해야 한다.tar 마무리 및 상응하는 처리
  • 서로 다른 압축 파일의 압축 해제 코드는 각각 다르고 후속 코드 작업에서 구체적으로 전개된다.
    3. 코드 구현
    우선 다운로드 폴더에 있는 모든 파일의 파일 이름을 가져옵니다.
    
    import glob
    import os
    
    path = r'C:\xxxx\download'
    file_lst = glob.glob(path + '/*')
    #  
    filename_lst = [os.path.basename(i) for i in file_lst]
    
    print(filename_lst)
    다음은 파일의 접두사 이름에 따라 압축이 필요한지 판단하고 코드 프레임워크를 살펴보겠습니다
    
    for i in filename_lst:
     if '.' in i:
      #  
      suffix = i.split('.')[-1]
      #  
      if suffix == 'gz':
       pass
       if ...: #   .tar  
        pass
      if suffix == 'tar':
       pass
      if suffix == 'zip':
       pass
      if suffix == 'rar':
       pass
    여기에는 두 가지 주의점이 있다.
    일부 파일은 접두사 이름이 없기 때문에 존재하지 않을 수도 있습니다.이때 filename을 사용합니다.split (".") [-1] 오류가 발생할 수 있으므로 먼저 판단해야 합니다.
    ... 로gz 마지막 파일은 압축을 풀고 다시 판단해야 합니다.tar 끝, 그리고 우리는 각각 네 가지 압축 파일의 압축 해제 코드를 함수로 쓸 수 있으며, 시간에 맞게 단독으로 호출하면 된다
    1. 처리.gz 파일
    
    import gzip
    
    def ungz(filename):
     filename = filename[:-3] # gz  filename   .gz
     gz_file = gzip.GzipFile(filename)
     with open(filename, "w+") as file:
      file.write(gz_file.read())
      return filename #  gzip untar 
    앞에서 반복적으로 언급한 gz 파일은 tar 파일과 협조할 수 있기 때문에 gz 파일을 압축한 후 tar 파일을 풀 필요가 있는지 판단해야 한다
    여기서 tar 파일의 함수를 먼저 쓸 수 있어요.
    2. 처리.tar 파일
    
    import tarfile
    
    def untar(filename):
     tar = tarfile.open(filename)
     names = tar.getnames()
     # tar , , 
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     for name in names:
      tar.extract(name, filename + "_dir/")
     tar.close()
    3. 처리.zip 파일
    
    import zipfile
    
    def unzip(filename):
     zip_file = zipfile.ZipFile(filename)
     #  tar , 
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     for names in zip_file.namelist():
      zip_file.extract(names, filename + "_dir/")
     zip_file.close()
    4. 처리.rar 파일
    
    import rarfile
    
    def unrar(filename):
     rar = rarfile.RarFile(filename)
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     os.chdir(filename + "_dir")
     rar.extractall()
     rar.close()
    이를 통해 알 수 있듯이 네 가지 압축 해제 코드가 약간 다르기 때문에 여러분의 실제 시범에서 스스로 차이를 체득하고 압축을 풀고 os와 협조하는 것을 추천합니다.remove () 는 압축 패키지를 삭제할 수 있습니다. 논리 프레임워크에서 압축 해제 함수를 추가한 내용을 보십시오.
    
    for filename in filename_lst:
     if '.' in filename:
      suffix = filename.split('.')[-1]
      if suffix == 'gz':
       new_filename = ungz(filename)
       os.remove(filename)
       if new_filename.split('.')[-1] == 'tar':
        untar(new_filename)
        os.remove(new_filename) 
      if suffix == 'tar':
       untar(filename)
       os.remove(filename)
      if suffix == 'zip':
       unzip(filename)
       os.remove(filename)
      if suffix == 'rar':
       unrar(filename)
       os.remove(filename)
    
    5. 실시간 검측 실현
    비교적 간단한 방법은 while True 사순환 협조 시간을 구축하는 것이다.sleep () 수면, 프레임은 다음과 같습니다.
    
    import time
    
    while True:
     func()
     time.sleep(5) #  
    마지막으로 두 번째 단계의 실현 코드를 함수로 바꾸고 순환 프레임워크에 넣으면 이번 수요를 완성할 수 있습니다. 전체 코드는 다음과 같습니다.
    
    import glob
    import os
    import gzip
    import tarfile
    import zipfile
    import rarfile
    import time
    
    path = r'C:\xxxx\download'
    file_lst = glob.glob(path + '/*')
    filename_lst = [os.path.basename(i) for i in file_lst]
    
    def ungz(filename):
     filename = filename[:-3]
     gz_file = gzip.GzipFile(filename)
     with open(filename, "w+") as file:
      file.write(gz_file.read())
     return filename
    
    def untar(filename):
     tar = tarfile.open(filename)
     names = tar.getnames()
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     for name in names:
      tar.extract(name, filename + "_dir/")
     tar.close()
    
    def unzip(filename):
     zip_file = zipfile.ZipFile(filename)
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     for names in zip_file.namelist():
      zip_file.extract(names, filename + "_dir/")
     zip_file.close()
    
    def unrar(filename):
     rar = rarfile.RarFile(filename)
     if not os.path.isdir(filename + "_dir"):
      os.mkdir(filename + "_dir")
     os.chdir(filename + "_dir")
     rar.extractall()
     rar.close()
    
    def unzip_files():
     for filename in filename_lst:
      if '.' in filename:
       suffix = filename.split('.')[-1]
       if suffix == 'gz':
        new_filename = ungz(filename)
        os.remove(filename)
        if new_filename.split('.')[-1] == 'tar':
         untar(new_filename)
         os.remove(new_filename)
       if suffix == 'tar':
        untar(filename)
        os.remove(filename)
       if suffix == 'zip':
        unzip(filename)
        os.remove(filename)
       if suffix == 'rar':
        unrar(filename)
        os.remove(filename)
    
    while True:
     unzip_files()
     time.sleep(5)
    파이썬이 백그라운드에서 각종 압축 파일을 자동으로 해제하는 실현 방법에 관한 이 글은 여기에 소개되었습니다. 더 많은 파이썬이 각종 압축 파일을 자동으로 해제하는 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기