找到行的开头,然后比较行输出文件名中的值

时间:2015-06-09 13:26:23

标签: python

我有多个.txt文件,其名称类似于try_1,try_2,try_3等。 每个文件都像

$somecontent
1somecontent
somecontent
$
0
1
1
1
0
00
somecontent
somecontent
x2 = 3.6235
z2 = 0.1036
F_eroie = 0.6156
someothervali = 0.9976
somecontent
Some_t2 = 0.8456
---------------------------------
somecontent
somecontent
$

$

$somecontent

任何文件中唯一的相似之处是它们都包含x2,z2,F_eroie,some_t2的值。我只想知道那些文件的文件名,这些文件的值为x2,z2和some_t2> = 0.5

这是我正在尝试的最新代码

import glob

for i in xrange(50):
       f=open("try_[i].txt",'r')
       for line in f:
               if (x2 >= 0.6 and z2 >= 0.5 and some_t2 >= 0.6):
                       print '%s'% f.filename[i]
                       f.close()

另一个是

with open('try_[i].txt') as infp:
   for line in infp:
      line = line.strip()
      if line.startswith('x2'):
              if x2 >=0.6:
                      if line.startswith('z2'):
                              if z2 >=0.5:
                                      if line.startswith('some_t2'):
                                              if some_t2 >=0.6:
                                                      print '%s'% f.filename[i]
                                                      f.close()

两者都以相同的方式工作(以前的另一个代码是整个文本读取行,现在它将x2,z2和some_t2视为变量)

1 个答案:

答案 0 :(得分:0)

我建议使用正则表达式搜索变量,而不是使用if-elses创建到天堂的阶梯。这个片段从文件中提取这些变量,并返回一个python字典,其中包含{x2:3.625,...}

等内容
regexPattern = "(\w+) = (\d.\d+)"

def extractVarsFromFile(filepath):
    variables = {}
    data = open(filepath).readlines()
    for line in data:
        srch = re.search(regexPattern, line, re.MULTILINE)
        if srch:
             results = srch.groups()
             variables[results[0]] = results[1]
    return variables

养成编写可重用和可配置代码的习惯。任何人都可以复制此方法并用于相关目的,而不必担心它是如何工作的(虽然它很简单)。

所以我在这里搜索一个看起来像变量声明行的正则表达式模式。如果找到了,我收集并返回所有变量的值。然后我使用另一个functino来根据您的要求处理这些变量。

def check_variable_rules(filepath, minimum=0.5):
    variables = extractVarsFromFile("numbers.txt")
    try:
        return float(ariables['x2'])>=minimum and float(variables['z2'])>=minimum and float(variables['some_t2']) >=minimum
    except:
        logging.warning("One or more of the requested variables are missing")
        return False

只需调用此函数print check_variable_rules(" try_00.txt")。如果它返回True,则您的变量遵循规则,否则它们不会。您可以轻松配置函数内部以更改规则或更改参数。

您共享的示例会检查不同的条件。这是对该功能的另一个同样简单而美观的调整,它还允许您修改条件:

def check_variable_rules(filepath, minimum_vals={'x2':0.6, 'z2':0.5, 'some_t2':0.6}):
    variables = extractVarsFromFile("numbers.txt")
    try:
        for min in minimum_vals.keys():
            if float(variables[min]) < float(minimum_vals[min]):
                return False
    except:
        return False
    return True

如何使用?只是一个班轮:

if check_variable_rules("numbers.txt"):
    print "Acceptable. Do what you want with the file"
else:
    print "Variables have lower values"