我有一个包含多个zip文件的文件夹(不是压缩文件夹)(文件夹中没有其他文件类型)。每个zip都有相同类型的文本文件,其中包含保存的不同数据。
我知道如何单独阅读,但我希望循环这个过程,而不必输入每个zip名称。 zipfile存档似乎不允许使用通配符,因此我无法使用此方法循环。是否可以使用glob循环进程?
目标是在不提取所有zip文件的情况下获取代理商名称。
单个文件读取
import os
os.listdir('C:\\NTM\\Test\\')
['00003_32_332.zip', '00011_273_569.zip', '00012_258_276.zip']
import glob
glob.glob('C:\\NTM\\Test\\*.zip')
['C:\\NTM\\Test\\00003_32_332.zip', 'C:\\NTM\\Test\\00011_273_569.zip', 'C:\\NTM\\Test\\00012_258_276.zip']
import zipfile
archive=zipfile.ZipFile('C:\\NTM\\Test\\00011_273_569.zip')
testagency=archive.open('agency.txt')
testagency.read()
'agency_id,agency_name,nVRT,ValleyRide'
更新:
现在,我可以遍历zip文件并循环获取文本文件 - 我无法从文件夹中的所有zip文件中打印agency_name。我当前的代码只打印文件夹中最后一个zip文件的文本文件中的最后一个代理的名称。我错过了一些复合语句结构吗?
def csv_dict_reader(file_obj):
reader = csv.DictReader(file_obj,delimiter =',')
阅读中的行:
打印(行[' agency_name'])如果名称 ==' 主要':
archive.open(' agency.txt')作为f_obj:
csv_dict_reader(f_obj)
Whatcom运输管理局
答案 0 :(得分:1)
示例代码
import glob
import zipfile
dirName = '/backup/'
zipList = glob.glob(diName+'*.zip')
for zipname in zipList:
archive = zipfile.ZipFile(zipname)
fileList = archive.namelist()
for fileName in fileList:
if fileName.endswith('.txt'):
archive.extract(fileName)
archive.close()
答案 1 :(得分:0)
我无法评论Fuji Komalans的评论。
这是固定代码。
import glob
import zipfile
dirName = 'C:/test/'
zipList = glob.glob(dirName + '*.zip')
print(zipList)
for zipname in zipList:
archive = zipfile.ZipFile(zipname)
fileList = archive.namelist()
for fileName in fileList:
if fileName.endswith('.txt'):
archive.extract(fileName)
print(fileName)
archive.close()