2014-06-24 141 views
1

我正在處理來自紅外探測器的結果,但有時它們有毛刺,所以數據點被記錄爲'0'。這是毫無價值的數據。我希望能夠搜索文件'0',對它們進行計數並打印出結果。在python中搜索文件

到目前爲止我所能做的就是搜索文件'0'並得到一個真/假的答案。

這是我的代碼:

def findzero(fname): 
    if os.path.isfile(fname): 
     f = open(fname) 
     s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) 
     if s.find('0') != -1: 
      print 'true' 
     else: 
      print '' 
    return; 
+2

你的代碼是什麼樣子的?這些文件有多大? 「0」是否由它們自己出現在一行上,還是這個二進制數據或長行的文本?假陽性的可能性有多大(例如,有效數據點可能是「10420」,不應該算作2「0」值)? –

+0

這是進行搜索的代碼:DEF findzero(FNAME): \t如果os.path.isfile(FNAME): \t \t F =開放(FNAME) \t \t S = mmap.mmap(f.fileno( ),0,訪問= mmap.ACCESS_READ) \t \t如果s.find(0)= -1: \t \t \t打印 '真' \t其他: \t \t打印' \t回報; – user3755536

+1

你可以[編輯]你的問題來添加這樣的細節。 –

回答

2

掃描所行的文件行,只有'0'計數線:

def countzero(fname): 
    try: 
     with open(fname) as f: 
      return sum(line.strip() == '0' for line in f) 
    except IOError: 
     # not a file we can read 
     return None 

Python的bool類型是int一個子類,True是等於1,False爲0,所以你可以對布爾值進行求和以得到一個數。

如果你需要一個百分比,你需要單獨計算行和0-數:

def count_zeros_and_lines(fname): 
    try: 
     with open(fname) as f: 
      zeros = total = 0 
      for line in f: 
       if line.strip() == '0': 
        zeros += 1 
       total += 1 
      return zeros, total 
    except IOError: 
     # not a file we can read 
     return None 

這將返回零的數量,總共行數。

+0

已經工作了,謝謝。還有一件事,需要將calcilate數據點的百分比變爲0.將上面的代碼添加到此操作的最佳方式是什麼? – user3755536

+0

@ user3755536:什麼是100%呢?行數? –

+0

是的,它基本上是行數。對不起,我的問題不夠清楚,很難知道要輸入什麼細節。 – user3755536