Как отфильтровать текстовый файл с конкретными строками - PullRequest
0 голосов
/ 01 мая 2018

У меня есть файл (file1.txt), где первый столбец содержит строки, я хочу отфильтровать в другом файле (file2.txt) строки, строки которых точно соответствуют списку «indref» (см. Код). Проблема в том, что полученный файл (см. Короткий пример) также добавляет те строки, которые «начинаются» со значений, которые я хочу добавить. Я просто хотел бы добавить конкретные строки (те, в «indref»). Спасибо.

import numpy as np

indref = ['p1', 'p3']

with open('file1.txt') as oldfile, open('file2.txt', 'w') as newfile:

    for line in oldfile:
        if any(x in line for x in indref):
            newfile.write(line)

Пример file1.txt

p1        4.252613E+01  
p2        4.245285E+01  
p3        4.272667E+01 
p4        4.255809E+01  
p5        4.284104E+01  
p6        4.292802E+01  
p7        4.295814E+01  
p8        4.286242E+01  
p9        4.286862E+01  
p10       4.258108E+01  

file2.txt:

p1        4.252613E+01  
p3        4.272667E+01 
p10       4.258108E+01  

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

У вас есть хороший ответ для использования split, но его можно уменьшить до

indref = ['p1', 'p3']

with open('file1.txt') as oldfile, open('file2.txt', 'w') as newfile:
    newfile.writelines(line for line in oldfile if line.split()[0] in indref)
0 голосов
/ 01 мая 2018

Вы можете использовать split() в каждой строке, а затем проверить, находится ли первый элемент в indref:

with open('test.txt') as f:
  indref = {'p1', 'p3'}
  data = [i for i in f.read().splitlines() if i.split()[0] in indref]

  with open('test2.txt', 'w') as f:
    f.write('\n'.join(data))

Выход:

p1        4.252613E+01  
p3        4.272667E+01 

Я изменил indref на набор, так как поиск в наборах составляет O (1) среднее время, и, если это был очень большой список, поиск может быть дорогим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...