Skrip python untuk meratakan pohon yang diekstraksi
Script yang ditulis di bawah ini mengekstrak file zip dan memindahkan file yang ada di dalam direktori paling atas ke direktori kerja saat ini. Skrip cepat ini dirancang agar sesuai dengan pertanyaan khusus ini di mana ada satu direktori teratas yang berisi semua file, meskipun dengan beberapa pengeditan dapat dibuat cocok untuk kasus yang lebih umum.
#!/usr/bin/env python3
import sys
import os
from zipfile import PyZipFile
for zip_file in sys.argv[1:]:
pzf = PyZipFile(zip_file)
namelist=pzf.namelist()
top_dir = namelist[0]
pzf.extractall(members=namelist[1:])
for item in namelist[1:]:
rename_args = [item,os.path.basename(item)]
print(rename_args)
os.rename(*rename_args)
os.rmdir(top_dir)
Uji coba
Berikut ini contoh cara kerja skrip. Semuanya diekstraksi ke direktori kerja saat ini, tetapi file sumber dapat berada di direktori differet sama sekali. Tes ini dilakukan pada arsip zip repositori github pribadi saya.
$ ls
flatten_zip.py* master.zip
$ ./flatten_zip.py master.zip
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
flatten_zip.py* LICENSE master.zip utc_indicator.png utc-time-indicator
Tes dengan file sumber berada di lokasi yang berbeda
$ mkdir test_unzip
$ cd test_unzip
$ ../flatten_zip.py ../master.zip
['utc-time-indicator-master/.gitignore', '.gitignore']
['utc-time-indicator-master/LICENSE', 'LICENSE']
['utc-time-indicator-master/utc-time-indicator', 'utc-time-indicator']
['utc-time-indicator-master/utc_indicator.png', 'utc_indicator.png']
$ ls
LICENSE utc_indicator.png utc-time-indicator
unzip archive.zip && mv Release/* .