如何在python中从文本文件中向下读取一行



我有一个包含以下行的txt文件:

ENBO => [
'h4d gh34245 ran54'
]

我希望能够将容器h4d gh34245 ran54放入python脚本中的一个变量中。

我的python脚本:

f = open(txt.txt, "r")
for line1 in f:
if ("ENBO" in line1):
print (line1)

然而,这只是打印ENBO => [,但我想要一种方法来读取当前行ENBO => [下面的行,以获得行h4d gh34245 ran54,并将其存储在脚本中的变量中,这样我就可以相应地从中读取。此外,我无论如何都不想更改中的txt文件。我想专门搜索ENBO的内容,而不是h4d gh34245 ran54的硬代码搜索

如果找到感兴趣的行,使用上下文管理器在文件上循环并打印/存储下一个值:

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'
]

这样的东西应该可以工作。

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

yper给出的答案应该有效,但我也可以建议研究JSON文件格式吗?这将允许您为密钥"ENBO"分配一个值,然后通过密钥:值配对访问该值?

不确定你读取文件的目的,也不确定是什么生成的,所以不能保证这种方法会对你有所帮助。

您的意思是希望将文本文件的内容放入变量中吗?有两种方法可以做到这一点,第一种方法是将所有内容放在一个字符串中(只有一行,我认为这就是你想要的(:

f = open(txt.txt, "r") # opening the file
output = f.read().replace('n', '') # replacing the newline with spaces

您只需移除第二行的一部分,就可以将其放入行数组中。

output = f.read()

我处理类似问题的常用方法是读取,直到找到指示我要查找的数据开始的行,然后收集所需的数据。对于这个问题,以下内容应该有效:

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)

我建议这样做:

from pathlib import Path
print(Path(MY_FILE).read_text().splitlines()[1])

强烈建议使用pathlib进行文件操作。如果你不能/不会使用它,这相当于:

with open(MY_FILE) as f:
print(f.readlines()[1])

首先,需要注意的是,您的文件包含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()会遍历整个文件,所以如果您的文件长度未知,您可能应该避免使用它

最新更新