Удаление строк в файле с помощью Python - PullRequest
0 голосов
/ 04 мая 2018

У меня есть входные файлы "input.dat", содержащие некоторые значения, подобные этому:

41611   2014    12  18  0   0
41615   2014    12  18  0   0
41625   2014    12  18  0   0
41640   2014    6   14  3   3
42248   2014    12  18  0   0
42323   2014    12  18  0   0
42330   2014    8   13  7   7
42334   2014    12  18  0   0
42335   2014    12  18  0   0
...

У меня много файлов наборов данных, но, похоже, столько нежелательных данных Как удалить много строк для этого случая 41640 и 42330 и все значения строк в данный момент. Сейчас я использовал этот скрипт:

with open(path+fname,"r") as input:
    with open("00-new.dat","wb") as output: 
        for line in input:
            if line!="41640"+"\n":
                output.write(line)

Результат: данные 41640 все еще существуют в выходных данных. Есть идеи ??

1 Ответ

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

Вам нужно изменить свое состояние - как сейчас он проверяет, равна ли вся строка 41640. Каждый line вместо этого равен всей строке данных, которые вы читаете, за которыми следует \n. Фиксированная версия вашей программы выглядит следующим образом:

with open("00-old.dat","r") as input:
with open("00-new.dat","wb") as output:
    for line in input:
        if "41640" not in line:
            output.write(line)

Чтобы удалить несколько строк, вы можете использовать all() в сочетании с пониманием списка, как, например, описано в этом посте ,

if all(nb not in line for nb in del_list):
    output.write(line)

где del_list - список значений, которые вы хотите удалить,

del_list = ["41615", "41640", "42334"]

Кроме того, из-за приоритета оператора в Python ваше исходное состояние всегда будет оцениваться как True. Это потому, что даже если 41640!=line было ложным, \n добавляется к нему и интерпретируется (после преобразования) как True. В основном, != оценивается первым вместо конкатенации строк, за которыми следует !=.

...