Python이 백그라운드에서 각종 압축 파일을 자동으로 압축 해제하는 실현 방법
Python 프로그램을 작성하여 압축 팩 형식의 파일을 다운로드할 때마다 자동으로 내부 파일을 현재 폴더로 압축 해제한 후 압축 패키지를 삭제합니다. 이 사례를 통해 배울 수 있는 지식:
코드 코드 이전에 복잡한 문제를 여러 가지 명확한 요구로 해석해야 한다. 즉, 이 프로그램이 실현하는 논리는 다음과 같다.
.gz: 즉 gzip, 보통 파일 하나만 압축할 수 있습니다
.tar:본질적으로 압축 도구가 아니라 포장 도구입니다. 따라갈 수 있습니다.gz 협조 형성.tar.gz의 압축 압축 형식입니다.zip:및.tar.gz는 유사하지만 여러 파일을 압축할 수 있습니다
.rar: 압축 파일 패키지, DOS용 최초
따라서 파일이 압축된 파일인지 아닌지에 대한 판단 논리는 다음과 같습니다.
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)
파이썬이 백그라운드에서 각종 압축 파일을 자동으로 해제하는 실현 방법에 관한 이 글은 여기에 소개되었습니다. 더 많은 파이썬이 각종 압축 파일을 자동으로 해제하는 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.