使用GROUPBY:
from itertools import groupby
with open("test.txt") as f:
for k, v in groupby(map(str.strip, f), lambda x: not x.startswith("#")):
if k:
print(list(filter(None, v)))
['ls -1', 'sudo apt-get install vim']
['sudo apt-get install ruby']
对于python2使用itertools.imap
和itertools.ifilter
您可以创建一个列表的列表与列表理解:
from itertools import groupby
with open("test.txt") as f:
out = [list(filter(None, v)) for k, v in groupby(map(str.strip, f), lambda x: not x.startswith("#")) if k]
print(out)
['ls -1', 'sudo apt-get install vim'], ['sudo apt-get install ruby']]
如果你想然后保存,所以你可以按名称访问使用的字典:
from itertools import groupby
from itertools import count
with open("test.txt") as f:
d = {}
cn = count(1)
for k, v in groupby(map(str.strip, f), lambda x: not x.startswith("#")):
if k:
d["list_{}".format(next(cn))] = list(filter(None, v))
print(d)
{'list_2': ['sudo apt-get install ruby'], 'list_1': ['ls -1', 'sudo apt-get install vim']}
您好,欢迎计算器!你实际上没有问过一个问题,那么你正在努力完成哪部分任务?如果你展示你迄今为止编写的代码,并解释它不是在做你期望的代码,那也许是最好的。那么我们有可能找出它有什么问题。 – 2015-03-25 12:07:58
谢谢蒂姆。 这是以前的代码,我正在修改它基于这里的人给出的输入。 DEF提取物(自,OUTFILE,模式): F =开放(OUTFILE,模式) 对于C在self.contents: 如果不是c.startswith( “#”): 命令= c.rstrip() #f.write(commands +'\ n') self.clist.append(commands) f。关闭() – 2015-03-25 15:10:32