我有两个文件,首先是我的大名单:
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
答案 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
列表。它没有按预期形成。