สคริปต์ Python สำหรับต้นไม้ที่ถูกดึงให้แบนราบ
สคริปต์ที่เขียนด้วยเบลโลว์จะแยกไฟล์ zip และย้ายไฟล์ที่อยู่ในไดเรกทอรีระดับบนสุดออกไปยังไดเรกทอรีที่ใช้งานในปัจจุบัน สคริปต์ด่วนนี้ได้รับการปรับแต่งให้เหมาะสมกับคำถามเฉพาะนี้ซึ่งมีไดเรกทอรีระดับบนสุดหนึ่งไดเรกทอรีที่มีไฟล์ทั้งหมดแม้ว่าจะมีการแก้ไขเพียงเล็กน้อยที่สามารถทำได้สำหรับกรณีทั่วไป
#!/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)
ทดสอบการทำงาน
นี่คือตัวอย่างของวิธีที่สคริปต์ควรทำงาน ทุกสิ่งที่แยกไปยังไดเรกทอรีการทำงานปัจจุบัน แต่ไฟล์ต้นฉบับสามารถอยู่ในไดเรกทอรี differet โดยสิ้นเชิง การทดสอบจะดำเนินการในไฟล์ zip ของที่เก็บ github ส่วนตัวของฉัน
$ 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
ทดสอบกับไฟล์ต้นฉบับที่อยู่ในตำแหน่งอื่น
$ 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/* .