Как прочитать одну строку вниз из текстового файла в Python - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть текстовый файл со следующей строкой:

ENBO => [
 'h4d gh34245 ran54'
]

Я хочу иметь возможность поместить содержимое h4d gh34245 ran54 в переменную в моем скрипте Python.

Мой скрипт на питоне:

f = open(txt.txt, "r")

for line1 in f:
         if ("ENBO" in line1):
               print (line1)

Тем не менее, это просто печатает ENBO => [, но я хочу получить способ прочитать строку ниже моей текущей строки ENBO => [, чтобы получить строку h4d gh34245 ran54 и сохранить ее внутри переменной в моем скрипте, чтобы я мог читать из нее соответственно. Кроме того, я не хочу, чтобы изменить текстовый файл в любом случае. И я хочу искать содержимое ENBO, а не поиск по жесткому коду для h4d gh34245 ran54

Ответы [ 7 ]

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

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

f = open('txt.txt', "r")
for line1 in f:
    if ("ENBO" in line1):
        break                 # Stops the loop
if f:                         # Make sure you didn't hit the end of the file
    data_line = f.readline()  # Grab the next line
    print(data_line)
0 голосов
/ 17 ноября 2018

Я бы порекомендовал просто сделать это:

from pathlib import Path

print(Path(MY_FILE).read_text().splitlines()[1])

Настоятельно рекомендуется использовать pathlib для файловых операций. Если вы не можете / не будете его использовать, это эквивалентно:

with open(MY_FILE) as f:
    print(f.readlines()[1])
0 голосов
/ 17 ноября 2018

Прежде всего, важно отметить, что ваш файл содержит 3 строки, даже если семантически эти 3 строки представляют только одну сущность.

Теперь, если ваш файл действительно такой простой и вам действительно нужна вторая строка, вы можете использовать метод readlines () . Это прочитает весь файл и вернет список, где каждая строка файла представлена ​​одним элементом.

Тогда, если вы знаете, что ваша строка всегда находится на второй строке (индекс 1), вы можете просто получить к ней доступ напрямую.

вот предлагаемое решение:

f = open(txt.txt, "r")
all_lines = f.readlines()
requested_line = all_lines[1]

Кроме того, я хотел бы предложить использовать синтаксис with для открытия файла, поэтому ресурс удаляется, когда он больше не используется:

with open(txt.txt, "r") as f:
    all_lines = f.readlines()
    requested_line = all_lines[1]

Подробнее об утверждении with можно прочитать в документах или в руководстве разработчика

Обратите внимание, что readlines() проходит через весь файл, поэтому, если ваш файл может иметь неизвестную длину, вам, вероятно, следует воздержаться от его использования.

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

Используйте менеджер контекста, чтобы зациклить файл и распечатать / сохранить следующее значение, если найдена интересующая строка:

with open('txt.txt', "r") as f:
    for line in f:
        if 'ENBO' in line:
            print(next(f)) #you can also append the values to a list here
        else:
            #do something here*
            pass

>>'h4d gh34245 ran54'

 'h4d gh34245 ran54'

 'h4d gh34245 ran54'

 'h4d gh34245 ran54'

Вы можете сделать это, потому что f является генератором, он печатаетследующая строка, если ENBO и продолжается после следующей строки.

Это проверено в фиктивном текстовом файле:

ENBO => [
 'h4d gh34245 ran54'
]

ENBO => [
 'h4d gh34245 ran54'
]

ENBO => [
 'h4d gh34245 ran54'
]

ENBO => [
 'h4d gh34245 ran54'
]
0 голосов
/ 17 ноября 2018

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

f = open(txt.txt, "r") # opening the file

output = f.read().replace('\n', '') # replacing the newline with spaces

Вы можете просто удалитьбит второй строки, чтобы поместить его в массив строк.

output = f.read()
0 голосов
/ 17 ноября 2018

Ответ, который дал yper, должен работать, но могу ли я также порекомендовать изучить форматирование файлов JSON? Это позволит вам присвоить значение ключу «ENBO», а затем получить к нему доступ через пару ключ: значение?

Не уверен, для чего вы читаете файл или что его генерирует, поэтому не могу гарантировать, что этот подход поможет вам.

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

Как-то так должно работать.

print_next_line = False
for line1 in f:
    if print_next_line:
        print(line1)
        print_next_line = False
    if "ENBO" in line1:
        print_next_line = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...