python文件遍历文件时递归有关问题
python文件遍历文件时递归问题
我想在特定文件夹中查找文本文件,并遍历文本文件查找其中有特定后缀并含有特定字符的文本行,并输出。我用os.path.isfile判断文本文件,后来我发现jpg格式文件也能通过判断,会出现UnicodeDecodeError错误,我又想把异常捕捉下来,让程序继续运行,有加了一个递归,谁知道改来改去还是不行,错误还一大堆,本人自学者,没有老师,请各位指点啊,代码写的有点乱,见谅啊
import os,fileinput
def ff(line,arg):
'''判断特定字符是不是全在文本的某一行中'''
for x in arg:
if x in line:
pass
else:
return False
return True
def search(rootdir,suffixes,arg,listdir):
for file in listdir:
path = os.path.join(rootdir,file)
if os.path.isfile(path):
fh = fileinput.input(path)
count = 0 #记录行数
try: #我想通过捕捉异常把图片格式的文件过滤掉,让程序继续运行
for line in fh:
count += 1
if line.endswith(suffixes):
if ff(line,arg):
print(count,path +':' + line )
except UnicodeDecodeError:
listdir = listdir.remove(file) #去掉列表中图片格式的文件
search(rootdir,suffixes,arg,listdir)
if os.path.isdir(path):
search(rootdir,suffixes,arg,listdir)
rootdir = ('F:\\文档文件')
listdir = os.listdir(rootdir)
search(rootdir,('+\n','.cn\n'),('@','com'),listdir)

------解决方案--------------------
建议楼主先处理掉其他格式文件,代码如下
我想在特定文件夹中查找文本文件,并遍历文本文件查找其中有特定后缀并含有特定字符的文本行,并输出。我用os.path.isfile判断文本文件,后来我发现jpg格式文件也能通过判断,会出现UnicodeDecodeError错误,我又想把异常捕捉下来,让程序继续运行,有加了一个递归,谁知道改来改去还是不行,错误还一大堆,本人自学者,没有老师,请各位指点啊,代码写的有点乱,见谅啊
import os,fileinput
def ff(line,arg):
'''判断特定字符是不是全在文本的某一行中'''
for x in arg:
if x in line:
pass
else:
return False
return True
def search(rootdir,suffixes,arg,listdir):
for file in listdir:
path = os.path.join(rootdir,file)
if os.path.isfile(path):
fh = fileinput.input(path)
count = 0 #记录行数
try: #我想通过捕捉异常把图片格式的文件过滤掉,让程序继续运行
for line in fh:
count += 1
if line.endswith(suffixes):
if ff(line,arg):
print(count,path +':' + line )
except UnicodeDecodeError:
listdir = listdir.remove(file) #去掉列表中图片格式的文件
search(rootdir,suffixes,arg,listdir)
if os.path.isdir(path):
search(rootdir,suffixes,arg,listdir)
rootdir = ('F:\\文档文件')
listdir = os.listdir(rootdir)
search(rootdir,('+\n','.cn\n'),('@','com'),listdir)
------解决方案--------------------
建议楼主先处理掉其他格式文件,代码如下
>>> import os
>>> rootdir = "C:\Users\lenovo\Desktop\wenjian"
>>> list_dir = os.listdir(rootdir)
>>> list_dir = os.listdir(rootdir)
>>> print list_dir
['c-api.pdf', 'Chrysanthemum.jpg', 'desktop.ini', 'faq.pdf', 'Hydrangeas.jpg', 'txt_test.txt']
>>> want = []
>>> import re
>>> for i in list_dir:
if re.findall(r".*?(?=.txt)", i) != []:
want.append(re.findall(r".*?(?=.txt)", i)[0] + ".txt")
>>> want
['txt_test.txt']
>>>