从另一个文件

时间:2017-04-02 18:02:41

标签: python python-2.7

我有两个文件,首先是我的大名单:

123 321 231 412
424 244 bear wolf
512 dinosaur 525

第二个带有我想要的索引,所以

1   
-1
3

现在我想要输出第一个文件中通过第二个文件的特定索引的确切行,注意:如果我有一个'-1'我想跳过它。

所以在示例中:

123 321 231 412
512 dinosaur 525

我试过这个:

import linecache

i = open('list_wanted', 'w')

with open ('index_list', 'r') as index:
     for line in index:
          int_index = [int(i) for i in line.split()] # this seems necessary since my index list seems to be in strings, not integers

     for line in int_index:
          if line != ('-1'):
               i.write(linecache.getline('big_list' , line))

我真的不想要整个big_list在我的记忆中,所以linecache似乎很好,但我不能让它正常工作。我做错了什么?

:编辑: 第一个答案是正确的,但我现在有一个非常奇怪的结果: 长度与我的预期不符,我加了一个小柜台w:

import linecache

w = 0

a = open('lines_wanted', 'w')

with open ('index_list', 'r') as index:
     int_index = [int(i), for i in index.readlines()]

     for line in int_index:
          a.write(linecache.getline('big_list', line))
          w = w + 1

print(w)

我写的次数(w)是预期的行数,但如果我检查我的文件我有一些行少(预期34752(与我的w相同),实际上只有34308)。 我认为这可能是重复的问题,我怎样才能避免它并在我的文件中得到我期望的w行。 有人有想法吗? 我需要与index_list文件中一样多的行。

P.s。:-1的情况不再是问题了,我摆脱了它,所以我在index_list文件中只有我想要的“好”行。

:EDIT2: 发现它,我必须在我的写命令中写入行+ 1

1 个答案:

答案 0 :(得分:1)

import linecache

i = open('lines_wanted', 'w')

with open('index_list', 'r') as index:
    # this seems necessary since my index list seems to be in strings, not integers
    int_index = [int(i) for i in index.readlines()]  

    for line in int_index:
        if line != ('-1'):
            i.write(linecache.getline('big_list', line))

问题在于int_index列表。它没有按预期形成。