如何读取两个标题之间的文本,并返回该标题下文本中某些模式匹配的标题名称

2024-07-02 13:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个txt文件:

heading 1
 abad askjd asdfj dk skldfj
 askdja ajsdk a ajksdj ajsdk a ajksd
 value yes never dont care about this
 asdj aksjd sd asda sda
 alsdk skldfj sd asda sda
heading 2
 asd asd dfgfd dk a ajksdj
 asdas asd asd sd asda sda
 asdas asdasd dk a ajksdj
 value 123 456 dk a ajksdj
 asdasd asdasd
heading 3
 asd asda sda jsdk a ajksdj
 dsfgd dfgd g dk a aj
 dfgfdg dfgfd dk skldfj
 value yes never dont care about this
 asdasd asdasd gd dfgd g dk 

所以在上面的文件中,我想得到所有的标题都有文本“value yes never”,所以当前文件的输出应该是:

标题1 标题3

在python中如何处理这个问题?你知道吗


Tags: 文件标题valuesdyesdksdanever
3条回答

以下代码将打印出所需内容:

fname = "file.txt"
with open(fname) as f:
    headings = []
    for line in f:
        if not line.startswith(' '):
            current_heading = line.strip()
        else:
            if 'value yes never' in line:
                headings.append(current_heading)

print(headings)

如果希望文本“value yes never”出现在每个标题之间的多行上,则可以在结尾处执行重复数据消除:

print(set(headings))

或在追加之前添加检查:

if current_heading not in headings:
    headings.append(current_heading)

这对我有用。你知道吗

    f = open("file.txt",'r')
    headings= []
    headingsCount = 0
    positionOFValueYesNever = []

    for line in f:

       if not line.startswith(' '):
             headings.append(line)
             headingsCount+=1

       elif line.find('value yes never') == True:
             positionOFValueYesNever.append(headingsCount-1)    

    for  i in positionOFValueYesNever:
       print(headings[i])

我建议构建一个简单的循环,逐行遍历文本。我不确定格式是否与您发布的内容匹配,但您可以执行以下操作

fname = "file.txt"
with open(fname) as f:
   for line in f:
      if not line.startswith( ' ' ):
         print line

相关问题 更多 >