Итак, я имею дело со скриптом, который должен заархивировать все файлы в одну папку с одинаковыми именами. Так, например, структура папок выглядит следующим образом ...
001.flt
001.hdr
001.prj
002.flt
002.hdr
002.prj
. , .
700.flt
700.hdr
700.prj
Чтобы получить файл в zip, у меня есть скрипт, который может обрабатывать один файл, но не распознавать ["*.flt", "*.hdr", "*.prj"]
Есть ли способ заставить скрипт распознавать имена файлов по их именам и группировать их по именам? Я хотел бы, чтобы каждый отдельный zip-файл содержал содержимое файла, но заархивировал его как 001.zip, 002.zip ....
, что означает, что zip-файл содержит различные расширения файла
001.zip (001.hdr, 001.prj, 001.flt)
'' '
import zipfile, sys, os, glob
inDir = r"\test\DEM"
outDir = r"\test\DEM_out"
filetype = "*.flt"
def zipfiletypeInDir(inDir, outDir):
# Check that input directory exists
if not os.path.exists(inDir):
print ("Input directory %s does not exist!" % inDir)
return False
print ("Zipping filetype(s) in folder %s to output folder %s" % (inDir, outDir))
# Loop through "filetype" in input directory, glob will match pathnames from
for inShp in glob.glob(os.path.join(inDir, filetype)):
# Build the filename of the output zip file
outZip = os.path.join(outDir, os.path.splitext(os.path.basename(inShp))[0] + ".zip")
# Zip the "filetype"
zipfiletype(inShp, outZip)
return True
def zipfiletype(infiletype, newZipFN):
print ('Starting to Zip '+(infiletype)+' to '+(newZipFN))
# Delete output zipfile if it already exists
if (os.path.exists(newZipFN)):
print ('Deleting'+ newZipFN)
os.remove(newZipFN)
# Output zipfile still exists, exit
if (os.path.exists(newZipFN)):
print ('Unable to Delete'+newZipFN)
return False
# Open zip file object
zipobj = zipfile.ZipFile(newZipFN,'w')
# Loop through "filetype" components
for infile in glob.glob( infiletype.lower().replace(filetype,"*.flt")):
# Skip .zip file extension
if os.path.splitext(infile)[1].lower() != ".zip":
print ("Zipping %s" % (infile))
# Zip the "filetype" component
zipobj.write(infile,os.path.basename(infile),zipfile.ZIP_DEFLATED)
zipobj.close()
return True
if __name__=="__main__":
zipfiletypeInDir(inDir, outDir)
print ("done!")