2017-09-04 89 views
-1

我試圖使用Python通過文件的目錄搜索和搜索字符串的打開每一個文件。Python的 - 搜索所有文件「退出0」字符串

我們談論的是小於1000個文件1,2,3號線的每個,所以打開它們全部只需要幾秒鐘。

嗯,我認爲我已經做到了,但有一個問題:我搜索的字符串是「exit 0」。

#!/usr/bin/env python 

import glob 

scriptsdir = "/dummydir/*.ksh" 
string = "exit 0" 
files = glob.glob(scriptsdir) 
teste = 0 

for script in files: 
    f=open(script,"r") 
    for line in f: 
     if string in line: 
      teste = teste + 1 
    f.close()  
print teste 

太差勁了,因爲代碼工作:這樣,在結束了「阿泰斯特」的值是指在目錄.ksh文件數,但如果字符串的改變1號出口,值到底「阿泰斯特」的爲0,我從字面上尋找一個「退出0」串存在於其中的一些文件。

是否有可能做到這一點?我已經測試過它,如果我將字符串值更改爲存在的值,則計數是正確的。

任何幫助?

謝謝

+1

當你打印「行」變量時,你會得到什麼?你是否收到「退出0」字符串? –

+1

您正在統計*行數*,而不是文件數量。要計算文件數量,請在文件中找到匹配項後中斷。 –

回答

0

您的計數器增加了每一行匹配;如果一個文件不止一次包含該字符串,則每次比賽的計數器都會增加。

您可以通過計數器增量之後增加休息解決這個問題。這將導致Python立即轉向下一個文件。

0

你也許可以用閱讀所有內容f.read()去。

#!/usr/bin/env python 
import glob 
scriptsdir = "/dummydir/*.ksh" 
string = "exit 0" 
files = glob.glob(scriptsdir) 
teste = 0 

for script in files: 
    f=open(script,"r") 
    if string in f.read(): 
     teste = teste + 1 
    f.close()  
print teste 
0

謝謝您的意見。只要我開始打印「行」值,我注意到他從其他地方得到「退出0」,再次查找腳本,發現第三個腳本在文件的內部被調用,出口0書面。

我不跟做的東西的這種方式同意,但我沒有足夠的力量來改變事情做的方式,所以以後我能解決我的問題,看到尋找「退出0」是不是我的問題都沒有。

乾杯