2014-06-18 25 views
0

我目前使用python linecache模块来抓取给定文本文档中的特定行,并用所述行创建一个新文件。例如,代码的一部分是这样的:用linecache提取一行的特定变量

cs = linecache.getline('variables.txt', 7) 
cs_1 = open("lo_cs", "w") 
cs_1.write(str(cs)) 
cs_1.close() 

的问题是,variables.txt内,线7由下式给出:

variable7 = 3423 

例如。然而,我想要新文件lo_cs只包含实际值'3423'而不是整行文本。此外,我想将整个'getline'命令插入到一个if循环中,这样如果变量7保留为空,则会执行另一个操作。有没有办法使用linecache检查'variable7 ='后面的空格,看看是否有任何输入,如果是,只抓住特定的值或字符串?

我知道(但并不真正理解)bash脚本似乎使用'$'作为插入或调用给定文件的占位符。我想我需要实现类似的东西...

我想过在文本文件中有说明,指示值应该在下面一行中指定 - 以避免只选择一行的段 - 但是它允许一个人意外地进入多余的休息时间,这会弄乱所有后续的“getline”命令,就需要选择哪一行而言。

任何帮助正确的方向将不胜感激!

回答

0

您可以用下面的方法来包装你需要的功能:

def parseline(l): 
    sp = l.split('=') 
    return sp[0], int(sp[1]) if len(sp) > 1 else None 

,或者如果你不需要的变量名:

def parseline(l): 
    sp = l.split('=') 
    return int(sp[1]) if len(sp) > 1 and sp[1].strip() != '' else None 

,然后使用:

csval = parseline(linecache.getline('variables.txt', 7)) 

您可以稍后将条件放在csval上以查看它是否为None,如果是,请将anoth呃行动。

+0

这正是我所需要的。非常感谢! – user2068783

+0

嗯,看起来我有这个方法的一些问题,并且我认为它基于在.txt文件中'variable7 = 34'内有空格。 我已经成功地得到“无”返回的唯一方法是写第二行,如下所示: SP = l.split(“=”) 就这样,‘无’则返回“variable7 = '和variable7 ='。然而,如果实际上定义了一个整数,那么'variable7 = 23'(没有空格)'None'仍然被返回,但是如果它被写为'variable7 = 23',那么记录'23'。如果可能的话,我想消除对空间的敏感性。再次感谢。 – user2068783

+0

@ user2068783更新了我的答案 – Korem