Строки поиска, вытащить конкретные данные - PullRequest
0 голосов
/ 05 ноября 2018

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

Мой пример - слово «TRED». Если TRED находится в местоположении индекса 95, мне нужно извлечь данные из определенных столбцов или определенных индексов из этой строки.

В настоящее время мой код такой ... но он не находит слово, и поэтому все результаты являются ошибками.

substr = "TRED"
with open(strFileLoc + "test.txt", 'r') as inputfile:
for line in inputfile:
    if line.find(substr, 95, 98) != -1:
        print(line.rstrip('\n'))
    else:
        print("There was an error at " + line.rstrip('\n'))

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Я считаю, что есть более простой способ сделать это сравнение. Проверьте код ниже.

substr = "TRED"
with open(strFileLoc + "test.txt", 'r', 'r') as inputfile:
    for line in inputfile:
        if line[95:99] == substr:
            print(line.rstrip('\n'))
        else:
            print("There was an error at " + line.rstrip('\n'))

Ouput:

sdaksdkakslkdlaksjdlkajslkdjlkajklsfjslkdvnksdjjlsjdlfjlskldfjlsnvkjdglsjdfljalsmnljklasjlfaaaaTREDdjsalkjdlka

Убедитесь, что вы указали правильные значения индекса (Примечание: строка [95:99], будет принимать элементы только в позиции 95,96,97,98).

0 голосов
/ 05 ноября 2018

Вы упомянули, что хотите извлечь из столбцов или индексов в этой строке. Если ваш файл разделен пробелом, запятой, символом табуляции и т. Д., Вы можете очень легко разбить каждую строку на столбцы. Следовательно, вы можете сделать это:

substr = "TRED"
token_splitter = ',' # or whatever separator you have
column_number = 2
with open(strFileLoc + "test.txt", 'r', 'r') as inputfile:
    for line in inputfile:
        columns = line.rstrip().split(token_splitter)
        if columns[column_number] == substr: # get the exact column directly
            print(line.rstrip('\n'))
        else:
            print("There was an error at " + line.rstrip('\n'))
0 голосов
/ 05 ноября 2018

Есть несколько способов решить проблему. Проблема (на основе моего быстрого теста) вызвана вызовом подстроки, которую вы делаете: str.find () индексирует с первой позиции, которую вы задаете для last-1, поэтому подстрока, которую вы ищете в этом случае, будет равна 3 длинных символов (TRE), даже если в этой позиции будет совпадение. Так что вы можете исправить это, просто увеличив конечную позицию до 99.

Однако find () также возвращает позицию, в которой она находит подстроку, (-1), если не найдена. Вы могли бы добиться хорошего результата, выполнив поиск без указания местоположения и проверки возвращаемого значения, таким образом надежно обрабатывая случай более короткой строки.

substr = "TRED"
with open(strFileLoc + "test.txt", 'r') as inputfile:
    for line in inputfile:
        loc = line.find(substr)
        if loc == 95:
            print(line.rstrip('\n'))
        else:
            print("There was an error at " + line.rstrip('\n'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...