gpt4 book ai didi

python读取文件,根据条件抓取行

转载 作者:行者123 更新时间:2023-12-01 07:18:33 30 4
gpt4 key购买 nike

假设我有一个文件 my_file 我想要其中的某些行,例如其中每行输出是一个列表元素。我试图了解如何控制和使用 Python 文件 i/o 操作。

文件:

cat > my_file <<EOF
[Ignore_these]
abc
234
[Wow]
123
321
def
[Take_rest]
ghi
jkl
EOF

说,在行 [Wow] 之后,我想合并整数行​​(可以是任意数量的行,这里我得到“123321”)并忽略其余的,直到我从我想要剩余行的地方遇到 [Take_rest] ('ghi' 和 'jkl')- [Take_rest] 始终是最后一部分。因此,结果输出为 data = list('123321', 'ghi', 'jkl')。我尝试了类似以下的方法,但无法理解 readline() 和 next() (等) 的工作原理。

def is_int(s):
try:
int(s)
return True
except ValueError:
return False


with open('my_file', 'r') as f:
data = []
while True:
line = f.readline()
if '[Wow]' in line:
wow = ''
while is_int(next(f)):
wow = ''.join([wow, line])
data.append(wow)
if '[Take_rest]' in line:
data.append(next(f))

if not line:
break

最佳答案

不要让事情变得复杂 - 使用以下方法:

with open('input.txt') as f:
data = ['']
wow_flag = False
for line in f:
line = line.strip()
if line.startswith('[Wow]'): # detect `Wow` section start
wow_flag = True
elif line.startswith('[Take_rest]'): # taking all the rest
data.extend(list(line.strip() for line in f))
if wow_flag and line.isdigit(): # capturing digits under `Wow` section
data[-1] += line

print(data)

输出:

['123321', 'ghi', 'jkl']

关于python读取文件,根据条件抓取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827704/

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