Мне нужно убрать сейсмологические события из текстового файла - PullRequest
0 голосов
/ 09 апреля 2019

Этот вопрос относится к файлу того же типа, о котором я задавал другой вопрос, почти месяц назад ( Мне нужно разбить сейсмологический файл, чтобы у меня было несколько подфайлов ).

Моя цель сейчас состоит в том, чтобы удалить события, которые в первой строке содержат строку «RSN 3». До сих пор я пытался отредактировать код лучшего ответа для вышеупомянутого вопроса, например так:

with open(refcatname) as fileContent:
    for l in fileContent:
        check_rsn_3 = l[45:51]
        if check_rsn_3 == "RSN  3":
            line = l[:-1]
            check_event = line[1:15]
            print(check_event, check_rsn_3)
        if not check_rsn_3 == "RSN  3":
            # Strip white spaces to make sure is an empty line
            if not l.strip():
                subFile.write(
                    eventInfo + "\n"
                )  # Add event to the subfile
                eventInfo = ""  # Reinit event info
                eventCounter += 1
                if eventCounter == 700:
                    subFile.close()
                    fileId += 1
                    subFile = open(
                        os.path.join(
                            catdir,
                            "Paquete_Continental_"
                            + str(fileId)
                            + ".out",
                        ),
                        "w+",
                    )
                    eventCounter = 0
            else:
                eventInfo += l
subFile.close()

Ожидаемые результаты: информация о событиях землетрясений с «RSN N» (где N ≠ 3) Фактические результаты: первая строка событий с «RSN 3» удалена, но не информация об оставшемся событии.

Заранее спасибо за помощь:)

1 Ответ

0 голосов
/ 09 апреля 2019

Я бы посоветовал не проверять, находится ли строка в определенном месте (например, l[45:51]), поскольку один символ может испортить это, вместо этого вы можете проверить, содержит ли вся строка «RSN 3» с if "RSN 3" in l

С line = l[:-1] вы получите только последний символ строки, поэтому line[1:15] не будет работать, так как это не массив.

Но если вам нужно удалить несколько строк,Вы можете просто проверить, содержит ли текущая строка «RSN 3», и затем читать строку за строкой, пока одна из них не содержит «RSN», пропуская те между ними.

skip = False
for line in fileContent:
    if "RSN  3" in line:
        skip = True
        continue
    if "RSN  " in line and "RSN  3" not in line:
        skip = False
        # rest of the logic
    if skip:
        continue

Таким образомвы даже не анализируете блоки, первая строка которых содержит «RSN 3».

...