我在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)
我想有一個缺陷的代碼,但我真的沒有看到它。
UPDATE
的代碼仍然出現了許多誤報:文件做包含搜索字符串,但被確定爲不包含它。
可能文本編碼是一個問題嗎?我在U
之前加上了搜索字符串以解釋Unicode編碼,但它沒有任何區別。
Python在某種程度上緩存文件內容?我不這麼認爲,但這可能會導致文件在糾正後仍然彈出。
可能某種惡意軟件會導致類似這些症狀嗎?似乎不太可能對我來說,但我有點絕望得到這個固定。
我試過了,它對我很有用(只是改變了「extens」和「rdir」以匹配我當前的env) –
@le_vine:這很好,但對我來說它仍然包含一些**做**包括搜索字符串。我應該補充一點,搜索字符串最近被添加到他們。任何想法可能會發生什麼?就好像Python從緩存而不是磁盤獲取文件內容或者其他東西一樣...... – RubenGeert
代碼中使用的命名約定並不是最好的。代碼中有太多的'fil','fLi'。試着大聲朗讀代碼。嘗試使用相應函數的文檔中的名稱,例如'dirpath,dirnames,filenames'而不是'fol,fols,fils' – jfs