免责声明:我是python的新手!
如果我想要一个文件的所有行,直到( stopterm
:和包括)包含一些字符串列表的行,有没有一种方法可以使用列表语法?我希望会有这样的东西:
usefullines = [line for line in file until stopterm in line]
现在,我有
usefullines = []
for line in file:
usefullines.append(line)
if stopterm in line:
break
这不是世界末日,但是由于Python语法的其余部分是如此简单,我希望有一个1思想>1的Python行映射。
发布于 2008-12-03 14:28:58
from itertools import takewhile
usefullines = takewhile(lambda x: not re.search(stopterm, x), lines)
from itertools import takewhile
usefullines = takewhile(lambda x: stopterm not in x, lines)
这里有一种保持停止线的方法:
def useful_lines(lines, stopterm):
for line in lines:
if stopterm in line:
yield line
break
yield line
usefullines = useful_lines(lines, stopterm)
# or...
for line in useful_lines(lines, stopterm):
# ... do stuff
pass
发布于 2008-12-03 14:26:44
“我希望得到一个1思想>1的Python行映射。”我们不都会喜欢一种以某种方式反映我们自然语言的编程语言吗?
你可以做到这一点,你只需要定义一次你独特的想法。然后你就有了你所希望的1:1映射。
def usefulLines( aFile ):
for line in aFile:
yield line
if line == stopterm:
break
差不多就是这样。
for line in usefulLines( aFile ):
# process a line, knowing it occurs BEFORE stopterm.
还有更通用的方法。enum_while
和enum_until
的lassevk
回答是对这个简单设计模式的概括。
发布于 2008-12-03 15:48:06
itertools解决方案非常好用。早些时候,我对itertools.groupby这个方便的工具感到惊讶。
但是,如果我不使用itertools的话,我仍然在进行修补。所以它是这样的(虽然有一个假设和一个缺点:文件并不大,而且它分别在各行上进行了一次额外的完整迭代。)
我创建了一个名为“try”的示例文件:
hello
world
happy
day
bye
读取文件并将变量名中的行放入行中后:
lines=open('./try').readlines()
然后
print [each for each in lines if lines.index(each)<=[lines.index(line) for line in lines if 'happy' in line][0]]
给出结果:
['hello\n', 'world\n', 'happy\n']
和
print [each for each in lines if lines.index(each)<=[lines.index(line) for line in lines if 'day' in line][0]]
给出结果:
['hello\n', 'world\n', 'happy\n', 'day\n']
所以你得到了最后一行--也包括了停止术语行。
https://stackoverflow.com/questions/337223
复制相似问题