Как найти точную строку в строке файла в Python? - PullRequest
0 голосов
/ 15 апреля 2019

Это для сценария, который предварительно обрабатывает входные файлы CFD на сервере для отправки заданий.В настоящее время у меня есть код Python для этого, но один файл, который мне нужно изменить, вызывает у меня проблемы.

Файл представляет собой файл данных с двумя столбцами, разделенный пробелами:

HEADER X

HEADER Y

-400,0 1

-320,0 0,1

-280,0 0,01

0,0 0,001

бла-бла-бла остальные файлы

Меня интересует только поиск и изменение строки «0.0» на что-то новое, например, «2.0», «-1.0» или «3.0»,или что угодно.Код, который у меня сейчас есть, уже знает, что «0.0» - это интересующая строка, и ищет ее в файлах и заменяет ее другим номером.Это было успешно сделано в других входных файлах CFD.

Однако в этом конкретном файле, поскольку нет алфавитных строк, которые я мог бы использовать для ключевых слов для перехода, я должен искать вхождения «0.0»,И проблема в том, что мой код в настоящее время заменяет первые вхождения «0.0», скажем, «1.0».Таким образом, код становится:

HEADER X

HEADER Y

-400,0 1

1.0 0,1

-280.0 0,01

0.0 0,001

бла-бла-бла, остальная часть файла

Код, который я сейчас использую:

with open('file.in','r') as file:
    for line in file:                                                                
        if '-400.0' in line: # jump to first instance of "-400.0"
            for line in file:
                if str(spk) in line: # in this case, spk = 0.0
                    orispkline = line #save the line with "0.0"
                    newspkline = line.replace(str(line.split([0]),str(newspk)) # replace "0.0" with "1.0"
                    break # jump out of the loop as the job is done
    file.seek(0) # go back to start of file:
        filedata = file.read() # read the file again 
        filedata = filedata.replace(str(orispkline),str(newspkline)) # replace the old line with the updated line

with open('file.in','w') as file:
    file.write(filedata) # write the file

Итак, что происходит,что он видит «0.0» в «-320.0» и просто заменяет его.Я хотел бы, чтобы код проходил построчно, находил «0.0», который появляется сам по себе и находится в начале строки, и заменяет его на желаемое число.

Я знаю коддействительно круговой и может быть оптимизирован, но он работает со всеми остальными файлами, и я хочу сделать вещи простыми и последовательными.

Примечание: строка для поиска не всегда "0.0", ноугол поворота коленчатого вала «0.0» всегда доставляет мне больше всего хлопот.

Спасибо всем за помощь!

1 Ответ

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

Хорошо, благодаря предложению furas в комментариях выше.Я изменил строку:

if str(spk) in line:

на

if line.startswith(spk):

, где "spk" - это время искры, преобразованное в строку.Это работало для всех случаев, которые я тестировал, и успешно определил правильную линию для замены.

Спасибо всем за обсуждение, и особенно фурам.

...