我有多个.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视为变量)
答案 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"