ฉันมีรุ่นที่แก้ไขแล้ว สคริปต์ที่ยอดเยี่ยมจริงๆ ที่เขียนขึ้นเมื่อครึ่งทศวรรษที่ผ่านมาเพื่อจัดระเบียบโฟลเดอร์ขนาดใหญ่จริงๆ ที่เต็มไปด้วยไฟล์แบบสุ่มใหม่ลงในไดเร็กทอรีที่เกี่ยวข้อง การแก้ไขของฉันไม่เกี่ยวข้องกับคำถาม ดังนั้นฉันจะใช้สคริปต์ต้นฉบับในตัวอย่างด้านล่าง
ฉันได้ตั้งค่าให้ผู้ใช้ป้อนข้อมูลแทนการฮาร์ดโค้ดตัวแปรลงในสคริปต์ (แสดงด้านล่างระหว่างไฟล์ การแก้ไขปัจจุบันของฉัน
ความคิดเห็น) และดูเหมือนว่าจะทำงานได้ดีพอ แต่ฉันกังวลว่ามันอาจจะกินไดเร็กทอรีทั้งหมดโดยไม่ได้ตั้งใจหากฉันทำผิดพลาด
คำถาม:
มีวิธีที่ฉันสามารถทำให้ผู้ใช้แจ้งสำหรับ reorg_dir
ด้วยวิธีดังกล่าวทำให้ผู้ใช้เลื่อนดูไดเร็กทอรี เลือกไดเร็กทอรี จากนั้นตรวจสอบอีกครั้งเพื่อให้แน่ใจว่าผู้ใช้พอใจกับสิ่งที่จะเกิดขึ้นหรือไม่
ในแนวทางเดียวกัน มีวิธีใดบ้างที่ระบบจะแจ้งให้ยกเว้นไฟล์บางประเภท มิฉะนั้นจะไม่รวมอะไรเลย
ต่อแล้วไง remove_emptyfolders
มิฉะนั้นถือว่า จริง
?
(คำถามที่ 1 เป็นคำถามที่สำคัญที่สุด ฉันไม่คาดหวังให้คุณแก้ปัญหาทั้งหมดสำหรับคำถามที่เหลือหากคุณไม่รู้สึกทะเยอทะยาน!)
#!/usr/bin/env python3
นำเข้าระบบปฏิบัติการ
นำเข้ากระบวนการย่อย
นำเข้าปิด
# --------------------------------------------- -------
reorg_dir = "/path/to/directory_to_reorganize"
ไม่รวม = (".jpg") # ตัวอย่างเช่น
remove_emptyfolders = จริง
# --------------------------------------------- --------
# การแก้ไขปัจจุบันของฉัน ---------------------------------------
ในขณะที่ทรู:
dirReorg= input("คุณต้องการจัดระเบียบไดเรกทอรีใดตามประเภทไฟล์")
ถ้าไม่ใช่ os.path.exists (dirReorg):
พิมพ์ ("ไม่มีเส้นทางนั้น ลองอีกครั้ง!")
ดำเนินต่อ
หยุดพัก
reorg_dir = os.path.abspath (ไดร์เรออร์ก)
# จบการแก้ไขปัจจุบันของฉัน -----------------------------------
สำหรับ root, dirs, ไฟล์ใน os.walk(reorg_dir):
สำหรับชื่อในไฟล์:
หัวเรื่อง = รูท +"/"+ชื่อ
ถ้า name.startswith("."):
นามสกุล = ".hidden_files"
elif ไม่ใช่ "." ในชื่อ:
นามสกุล = ".without_extension"
อื่น:
นามสกุล = ชื่อ [name.rfind ("."):]
ถ้าไม่ขยายในไม่รวม:
new_dir = reorg_dir+"/"+ส่วนขยาย[1:]
ถ้าไม่ใช่ os.path.exists (new_dir):
os.mkdir (ใหม่_dir)
shutil.move(เรื่อง new_dir+"/"+ชื่อ)
ล้างข้อมูล def ():
รายการไฟล์ = []
สำหรับ root, dirs, ไฟล์ใน os.walk(reorg_dir):
สำหรับชื่อในไฟล์:
filelist.append(รูท+"/"+ชื่อ)
ไดเร็กทอรี = [รายการ [0] สำหรับรายการใน os.walk(reorg_dir)]
สำหรับ dr ในไดเร็กทอรี:
ตรงกัน = [รายการสำหรับรายการในรายการไฟล์ถ้า dr ในรายการ]
ถ้า len (ตรงกัน) == 0:
พยายาม:
shutil.rmtree (ดร)
ยกเว้น FileNotFoundError:
ผ่าน
ถ้า remove_emptyfolders == จริง:
ทำความสะอาด()