gpt4 book ai didi

python - 在python中的标题之间读取文件

转载 作者:太空狗 更新时间:2023-10-30 02:53:35 24 4
gpt4 key购买 nike

我有一个大文本文件,其中的值由以“#”开头的标题分隔。如果条件与标题中的条件匹配,我想读取文件直到下一个标题“#”并跳过文件的其余部分。

为了测试我正在尝试读取以下名为 test234.txt 的文本文件:

# abcdefgh
1fnrnf
mrkfr
nfoiernfr
nerfnr
# something
njndjen kj
ejkndjke
#vcrvr

我写的代码是:

file_t = open('test234.txt')
cond = True
while cond:
for line_ in file_t:
print(line_)
if file_t.read(1) == "#":
cond = False
file_t.close()

但是,我得到的输出是:

# abcdefgh

fnrnf

rkfr

foiernfr

erfnr

something

jndjen kj

jkndjke

vcrvr

相反,我希望两个 header 之间的输出由“#”分隔,即:

1fnrnf
mrkfr
nfoiernfr
nerfnr

我该怎么做?谢谢!

编辑:Reading in file block by block using specified delimiter in python谈论按标题分隔的组中读取文件,但我不想阅读所有标题。我只想读取满足给定条件的标题,一旦该行到达下一个标有“#”的标题,它就会停止读取文件。

最佳答案

itertools.groupby可以帮助:

from io import StringIO
from itertools import groupby

text = '''# abcdefgh
1fnrnf
mrkfr
nfoiernfr
nerfnr
# something
njndjen kj
ejkndjke
#vcrvr'''


with StringIO(text) as file:
lines = (line.strip() for line in file) # removing trailing '\n'
for key, group in groupby(lines, key=lambda x: x[0]=='#'):

if key is True:
# found a line that starts with '#'
print('found header: {}'.format(next(group)))

if key is False:
# group now contanins all lines that do not start with '#'
print('\n'.join(group))

请注意,所有这些都是惰性。你只会在内存中拥有两个标题之间的所有项目。

您必须将 with StringIO(text) as file: 替换为; with open('test234.txt', 'r') as file:...

测试的输出是:

found header: # abcdefgh
1fnrnf
mrkfr
nfoiernfr
nerfnr
found header: # something
njndjen kj
ejkndjke
found header: #vcrvr

更新 因为我误解了。这是一个新的尝试:

from io import StringIO
from collections import deque
from itertools import takewhile

from_line = '# abcdefgh'
to_line = '# something'

with StringIO(text) as file:
lines = (line.strip() for line in file) # removing trailing '\n'

# fast-forward up to from_line
deque(takewhile(lambda x: x != from_line, lines), maxlen=0)

for line in takewhile(lambda x: x != to_line, lines):
print(line)

我在哪里使用itertools.takewhile在满足条件之前获取迭代器(直到在您的案例中找到第一个 header )。

deque 部分就是 consume pattern在 itertools 食谱中建议。它只是快进到给定条件不再成立的地步。

关于python - 在python中的标题之间读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com