我有一个类似的文件:
Hi=1
How=2
Are=3
You=4
Thank=5
You=6
Will=7
Be=8
Better=9
Hi=10
How=11
Are=12
You=13
Thank=14
You=15
Will=16
Be=17
Better=18
我希望得到每一个(例如)第1行,第3行,第5行并将其存储在列表中。我知道,获取特定行很容易,linecache
enumarate
与itertools
等等。
但正如你所看到的,我在文件中迭代的行数相同,所以在从第一节开始获得第1行,第3行,第5行后,我必须从第二节获得第1行,第3行,第5行。
所以我想让smt类似于:
>>>print "This is 1st row %s" %var1
>>>print "This is 3rd row %s" %var2
>>>print "This is 5th row %s" %var3
This is 1st row Hi=1 Hi=10
This is 3rd row Are=3 Are=12
This is 5th row Thank=5 Thank=14
提前感谢您的帮助..
编辑:
关于评论,在真实文件中有超过60,000个诗节。
每节经用=
符号分隔..
答案 0 :(得分:3)
使用defaultdict(list)
:
from collections import defaultdict
with open("abc") as f:
dic=defaultdict(list)
i=1
for line in f:
line=line.strip()
if line:
dic[i].append(line)
i+=1
else:
i=1
for i in range(1,10,2): #get the 1,3,5,7,9 line
print "This is row {0}: {1}".format(i," ".join(dic[i]))
print
for i in [1,4,8]: #get the 1,4,8 line
print "This is row {0}: {1}".format(i," ".join(dic[i]))
<强>输出:强>
This is row 1: Hi=1 Hi=10
This is row 3: Are=3 Are=12
This is row 5: Thank=5 Thank=14
This is row 7: Will=7 Will=16
This is row 9: Better=9 Better=18
This is row 1: Hi=1 Hi=10
This is row 4: You=4 You=13
This is row 8: Be=8 Be=17
答案 1 :(得分:1)
说明:verses
是list
,其中包含文字中的所有经文。
indexes
是list
,其中包含您要打印的所有行。
最后,为了打印结果,只需使用zip
即可完成工作:
txt = """Hi=1
How=2
Are=3
You=4
Thank=5
You=6
Will=7
Be=8
Better=9
Hi=10
How=11
Are=12
You=13
Thank=14
You=15
Will=16
Be=17
Better=18"""
verses = [[]]
for line in txt.splitlines():
if line != "":
verses[len(verses)-1] += [line]
else:
verses += [[]]
indexes = [1, 3, 5]
for i, line in enumerate(zip(*verses)):
if i+1 in indexes:
print("This is {} row {}".format(i+1, " ".join(line)))
输出:
This is 1 row Hi=1 Hi=10
This is 3 row Are=3 Are=12
This is 5 row Thank=5 Thank=14