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

时间:2017-05-04 17:38:45

标签: python python-2.7

我有一个包含多个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运输管理局

2 个答案:

答案 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()