我有一些简单的python代码搜索文件中的字符串,例如path=c:\path
,c:\path
可能会有所不同.目前的代码是:
def find_path(i_file): lines = open(i_file).readlines() for line in lines: if line.startswith("Path="): return # what to do here in order to get line content after "Path=" ?
之后获取字符串文本的简单方法是什么Path=
?有没有简单的方法,没有封闭,反射或其他深奥的东西?
如果字符串是固定的,您可以简单地使用:
if line.startswith("Path="): return line[5:]
它提供了从字符串中的位置5开始的所有内容(字符串也是一个序列,所以这些序列操作符也在这里工作).
或者您可以在第一行拆分=
:
if "=" in line: param, value = line.split("=",1)
然后param是"Path",值是第一个=后的其余部分.
# ... if line.startswith(prefix): return line[len(prefix):]
str.partition()
def findvar(filename, varname="Path", sep="=") : for line in open(filename): if line.startswith(varname + sep): head, sep_, tail = line.partition(sep) # instead of `str.split()` assert head == varname assert sep_ == sep return tail
from ConfigParser import SafeConfigParser config = SafeConfigParser() config.read(filename) # requires section headers to be present path = config.get(section, 'path', raw=1) # case-insensitive, no interpolation
str.split()
re.match()
对于切片(有条件或无条件),我更喜欢同事最近建议的内容; 使用空字符串替换.更容易阅读代码,更少的代码(有时)和更少的指定错误字符数的风险.好; 我不使用Python,但在其他语言中我更喜欢这种方法:
rightmost = full_path.replace('Path=', '', 1)
或者-跟进到这个主题的第一个注释-如果此只应如果行开始用Path
:
rightmost = re.compile('^Path=').sub('', full_path)
上面提到的一些主要区别在于没有涉及"神奇数字"(5),也没有必要同时指定' 5
' 和字符串' Path=
',换句话说,我更喜欢这种代码维护方法观点看法.
def remove_prefix(text, prefix): return text[len(prefix):] if text.startswith(prefix) else text
无法抗拒这一行.需要Python 2.5+.
我更喜欢pop
索引[-1]
:
value = line.split("Path=", 1).pop()
至
value = line.split("Path=", 1)[1] param, value = line.split("Path=", 1)
或者为什么不呢
if line.startswith(prefix): return line.replace(prefix, '', 1)
怎么样..
>>> line = r'path=c:\path' >>> line.partition('path=') ('', 'path=', 'c:\\path')
这个三联体是头部,分离器和尾部.