2014-06-24 143 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