在Python中显示{}内的行

2024-03-28 13:06:45 发布

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

我需要使用Python打印“List A”的{}中的行。我正在读出行并搜索字符串List A,但我不确定如何只显示{}中的行。你知道吗

示例:

  List A
  {
    name,
    place,
    animal,
    thing
  }

 List B
 {
    Cat,
    Dog,
 }

更新:我试过指纹(重新编译('List A\n\{\n(.*)\n\}',关于多行| 关于DOTALL) .search(s).groups()[0]),但它不起作用。给我找不到错误组。你知道吗

我试图找到字符串“列表B”,但这种力量也工作。我已经把代码贴在下面了。你知道吗

import sys
input_file = open(r'path/input.txt') 
Output_file = open('path/output.txt','w')
input_file_read = input_file.read()
for line in str(input_file_read):
    output_file.write(line)
    if line == "List B":
        next(line)
        print line 

输入\文件\读取是为读取而打开的输入文件,输出\文件是为写入输出而打开的输出文件。你知道吗

问:有人能告诉我为什么if语句不搜索字符串吗??我怎样才能在众多的名单中找到B名单??我只给出了一个输入文件的示例,但是在那30个文件中有许多相同格式的列表。谢谢你的帮助!!!你知道吗


Tags: 文件path字符串txt示例列表readinput
3条回答

如果从包含文本的字符串input_str开始,那么使用正则表达式应该很快:

re.search(r'List A\n\s*\{\n(.*?)\n\s*\}', input_str, re.DOTALL).group(1)

给予

name,
place,
animal,
thing

您可以在正则表达式中看到文本的结构(\n是一个新行)。.*?\n\}匹配所有字符(.*表示任意数量的任意字符,包括换行符,这要归功于DOTALL)…但是当它遇到第一个右大括号时(得益于?),就停止\s*表示不同数量的空格(因为问题中的大括号并不总是恰好位于行的开头)。你知道吗

如果您从一个文件开始,比如在您的示例中,那么可以使用上面的解决方案(使用input_str = input_file.read()),但是这有点浪费(因为这不必要地读取组的列表)。因此,另一种可能性是逐行读取文件,并动态地开始和停止收集数据(使用有限自动机)。但是,这似乎并不方便(除非您使用外部解析模块)。所以,如果您的文件不是太大,我认为上面的正则表达式解决方案是合适的。你知道吗

处理任何列表名的更通用示例:

import re
s = ''  # Put your content into s
for match in re.finditer(r'List\s+(\w+)\s*\{(.*?)\}', s, re.DOTALL)
    print '   -New List    '
    print 'Name of List:', m.group(1)
    print 'Content of List:', m.group(2)
import re

s = """
List A
{
name,
place,
animal,
thing
}
"""

print(re.compile('List A\\n\\{\n(.*)\\n\\}', re.MULTILINE | re.DOTALL)
      .search(s).groups()[0])

输出:

name,
place,
animal,
thing

相关问题 更多 >