2 mmayyue mmayyue 于 2016.02.22 16:56 提问

python如何从zip压缩包内过滤出指后缀文件

比如压缩包中有.jpg、.txt、.doc而我只想打印出.txt的文件列表,如何实现,初学pyhton还请有经验的朋友帮忙指导,我的简单代码如下:
#coding = utf-8

-*- coding: cp936 -*-

import os
import fnmatch
import zipfile

def iterfindfiles(path, fnexp):
for root, dirs, files in os.walk(path):
for filename in fnmatch.filter(files, fnexp):
yield os.path.join(root, filename)

for filelist in iterfindfiles("F:\pythinfile", "*.zip"):
print filelist #打印zip文件列表
print '#'*5
z = zipfile.ZipFile(filelist, "r")
for file in z.namelist( ):
print file #打印zip文件中文件的列表
需要在打印出所有文件信息中过滤出指定类型的文件,如何添加代码?谢谢

2个回答

qq_23660243
qq_23660243   2016.02.22 20:43

import os
import fnmatch
import zipfile
import re
def iterfindfiles(path, fnexp):
for root, dirs, files in os.walk(path):
for filename in fnmatch.filter(files, fnexp):
yield os.path.join(root, filename)
result=""
for filelist in iterfindfiles("D:\Temporary", "*.zip"):
z = zipfile.ZipFile(filelist, "r")
for file in z.namelist():
result=result+file+"\n"
print "以下内容是压缩包所包含文件:"
print result+"\r\n"
unicodepage=result.decode("utf-8")
myItems=re.findall("([\w\d]*?.txt)",unicodepage,re.S)
items=[]
print "以下是获取所有以.txt结束的文本"
for item in myItems:

items.append(item.replace("\r\n",""))

print items


qq_23660243
qq_23660243 取出来的是字符串 不是文件 只是个名字 你看看路径有没有问题
接近 2 年之前 回复
qq_23660243
qq_23660243 我的第一感觉是根据获得的文件名字加上路径 然后open 但没有具体实现过 你的错误不知道为什么
接近 2 年之前 回复
mmayyue
mmayyue 我尝试从打印出来的文件名中使用open()方式,打开文件读取文件中的行数,一直提示找不到文件, f = open(a,'r').readlines() IOError: [Errno 2] No such file or directory: u'111-0-1456112850-00698-WA_SOURCE_0044-0.bcp'
接近 2 年之前 回复
mmayyue
mmayyue 感谢您的回答,我基于您的代码稍微修改了下,可以实现过滤出指定类型文件了,但是有什么方法能够访问文件内容吗?
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.02.22 22:17

遍历文件的时候 判断文件后缀名等来判断过滤

mmayyue
mmayyue 试了很多方法,目前是采用findall过滤关键字实现的,现在想要从过滤结果中打开这些文件,有什么好的办法吗?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!