从文件夹中的多个.zip读取.txt

问题描述:

我有一个包含多个zip文件(文件夹内没有其他文件类型)的文件夹(未压缩)。每个zip都有相同类型的文本文件,其中包含保存的不同数据。从文件夹中的多个.zip读取.txt

我知道如何分别读取每一个,但我期待循环过程而不必键入每个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文件和循环遍历来获取文本文件 - 我无法从所有的压缩文件的打印AGENCY_NAME夹。我目前的代码只打印文件夹中最后一个zip文件的文本文件中最后一个代理的名称。我是否缺少一些复合语句结构?

DEF csv_dict_reader(file_obj):
读者= csv.DictReader(file_obj,分隔符= ' ')
为行中的读取器:
打印(行[' AGENCY_NAME'])

如果 == ' ':
与archive.open(' agency.txt')作为f_obj:
csv_dict_reader(f_obj)

霍特科姆交通管理局

+0

'在glob.glob ARCHIVE_NAME( 'C:\\ \\ NTM测试\\ *。zip文件。'):档案= zipfile.ZipFile(ARCHIVE_NAME) '。你知道循环吗? –

+0

archive_name!那是不是 –

+0

啊,好的,我误解了你的问题。因此,我的回答并没有解决你的问题。 – JohanL

感谢Jean-Francois

for archive_name in glob.glob('C:\\NTM\\Test\\*.zip'): 
    archive=zipfile.ZipFile(archive_name) 
    testagency=archive.open('agency.txt') 
    testagency.read() 

示例代码

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() 
+0

谢谢!我觉得这个东西缺少了吗?它不会返回我可以与您分享的错误,但它也不会运行 –