【发布时间】:2013-12-13 06:58:00
【问题描述】:
我使用的是 Python 2.7.1,我正在尝试识别所有 不 包含某些文本字符串的文本文件。
该程序一开始似乎正在运行,但每当我将文本字符串添加到文件时,它就会不断出现,就好像它不包含它一样(误报)。当我检查文本文件的内容时,字符串显然存在。
我尝试写的代码是
def scanFiles2(rdir,sstring,extens,start = '',cSens = False):
fList = []
for fol,fols,fils in os.walk(rdir):
fList.extend([os.path.join(rdir,fol,fil) for fil in fils if fil.endswith(extens) and fil.startswith(start)])
if fList:
for fil in fList:
rFil = open(fil)
for line in rFil:
if not cSens:
line,sstring = line.lower(), sstring.lower()
if sstring in line:
fList.remove(fil)
break
rFil.close()
if fList:
plur = 'files do' if len(fList) > 1 else 'file does'
print '\nThe following %d %s not contain "%s":\n'%(len(fList),plur,sstring)
for fil in fList:
print fil
else:
print 'No files were found that don\'t contain %(sstring)s.'%locals()
scanFiles2(rdir = r'C:\temp',sstring = '!!syn',extens = '.html', start = '#', cSens = False)
我猜代码中存在缺陷,但我真的没有看到。
更新
代码仍然会出现许多误报:确实包含搜索字符串但被识别为不包含搜索字符串的文件。
文本编码可能是这里的问题吗?我在搜索字符串前加上 U 以说明 Unicode 编码,但它没有任何区别。
Python 是否以某种方式 缓存 文件内容?我不这么认为,但这可能会导致文件在更正后仍会弹出。
某种恶意软件会导致这样的症状吗?对我来说似乎不太可能,但我有点急于解决这个问题。
【问题讨论】:
-
我已经尝试过了,它对我有用(只是更改了“extens”和“rdir”以匹配我当前的环境)
-
@le_vine:这很好,但对我来说,它仍然包含一些确实包含搜索字符串的文件。我应该补充一点,搜索字符串是最近添加到其中的。知道会发生什么吗?好像 Python 从缓存而不是磁盘或其他东西中获取文件内容......
-
代码中使用的命名约定不是最好的。代码中有太多
fil、fLi。尝试大声朗读代码。尝试将文档中的名称用于相应功能,例如dirpath, dirnames, filenames而不是fol, fols, fils
标签: python list python-2.7