การใช้โมดูล 'zipimport' ทำให้สามารถนำเข้าโมดูลและแพ็คเกจ Python จากไฟล์เก็บถาวรรูปแบบ ZIP ได้ โมดูลนี้ยังอนุญาตให้รายการของ sys.path เป็นสตริงที่ตั้งชื่อไฟล์ ZIP ที่เก็บถาวร ไฟล์ใดๆ อาจมีอยู่ในไฟล์ ZIP แต่มีเพียงไฟล์ .py และ .pyc เท่านั้นที่สามารถนำเข้าได้ ไม่อนุญาตให้นำเข้า ZIP ของโมดูลไดนามิก
การทำงานของโมดูลนี้อธิบายได้ด้วยการสร้างไฟล์ zip ในไดเร็กทอรี 'newdir' ก่อน ไฟล์ต่อไปนี้จะถือว่ามีอยู่ในไดเรกทอรี newdir
['guess.py', 'hello.py', 'impzip.py', 'mytest.py', 'prime.py', 'prog.py', 'tmp.py']
import sys, glob
import zipfile
files = glob.glob("*.py")
print (files)
zf = zipfile.PyZipFile('zipimp.zip', mode='w')
for file in files:
zf.write(file)
zf.close() ตอนนี้เราใช้ 'zipimp.zip' ในส่วนที่เหลือของบทความ
โมดูล 'zipimport' กำหนด zipimporter คลาสที่กำหนดวิธีการดังต่อไปนี้
zipimporter ()
เมธอดนี้เป็นคอนสตรัคเตอร์ที่สร้างอินสแตนซ์ zipimporter ใหม่ มันต้องมีพาธไปยังอาร์กิวเมนต์ของไฟล์ ZIP ZipImportError จะปรากฏขึ้นหากไม่ใช่ไฟล์ ZIP ที่ถูกต้อง
>>> import zipimport
>>> importer = zipimport.zipimporter('zipimp.zip') find_module()
เมธอดนี้หาโมดูลที่ระบุ โดยจะส่งคืนอินสแตนซ์ zipimporter หากพบโมดูล หรือไม่มีหากไม่พบ
>>> ret=importer.find_module('prime')
>>> ret
<zipimporter object "zipimp.zip">
>>> ret=importer.find_module('sample')
>>> ret
>>> print (ret)
None get_code()
เมธอดนี้ส่งคืนอ็อบเจ็กต์โค้ดสำหรับโมดูลที่ระบุ ยก ZipImportError หากไม่พบโมดูล
>>> prog=importer.get_code('prime')
>>> print (prog)
<code object <module> at 0x022A4650, file "zipimp.zip\prime.py", line 1> load_module()
วิธีนี้จะโหลดโมดูลที่ระบุ ส่งคืนโมดูลที่นำเข้าหรือเพิ่ม ZipImportError หากไม่พบ
>>> importer = zipimport.zipimporter('zipimp.zip')
>>> mod=importer.load_module('prog')
30
>>> mod.__name__
'prog'
>>> mod.__file__
'zipimp.zip\\prog.py'
>>> mod.__loader__
<zipimporter object "zipimp.zip"> get_source()
เมธอดนี้ส่งคืนซอร์สโค้ดสำหรับโมดูลที่ระบุ
>>> prog=importer.get_source('prime')
>>> print (prog)
def isprime(x):
for i in range(2,x-1):
if x%i==0:
return False
else:
return True
f = int(input())
l = int(input())
primelist = list(filter(isprime, range(f,l)))
print ("prime1", "prime2", "composites")
composites=[(primelist[i-1], primelist[i],(primelist[i]-1)-primelist[i-1]) for i in range(1,len(primelist))]
print (composites)