Python-从文件中获取特定行并进行迭代

时间:2013-04-19 08:39:51

标签: python file

我有一个类似的文件:

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 enumarateitertools等等。 但正如你所看到的,我在文件中迭代的行数相同,所以在从第一节开始获得第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个诗节。 每节经用=符号分隔..

2 个答案:

答案 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)

说明:verseslist,其中包含文字中的所有经文。

indexeslist,其中包含您要打印的所有行。

最后,为了打印结果,只需使用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