【问题标题】:how to read a specific line which starts in "#" from file in python如何从python中的文件中读取以“#”开头的特定行
【发布时间】:2016-04-21 22:34:24
【问题描述】:

如何从 python 中的文件中读取以“#”开头的特定行和 将该行设置为字典中的键(不带“#”)并设置该行之后的所有行,直到下一个“#”作为值是字典 请帮帮我
这是文件:

【问题讨论】:

  • 首先不要发布图片,而是复制粘贴。同时向我们展示您是如何尝试解决此问题的。
  • 那么我怎样才能显示文件的信息呢?
  • 您可以将文件的数据粘贴到您的问题中并将其放入代码块中(通过选择数据并单击{} 按钮)以保留格式。

标签: python file dictionary


【解决方案1】:
from collections import defaultdict

key = 'NOKEY'
d = defaultdict(list)

with open('thefile.txt', 'r') as f:
    for line in f:
        if line.startswith('#'):
            key = line.replace('#', '')
            continue
        d[key].append(line)

您的字典将在每个键下都有一个行列表。以'#' 开头的第一行之前的所有行都将存储在密钥'NOKEY' 下。

【讨论】:

  • 您可能还想在删除前导 # 后从键中去除前导和尾随空格,例如 key=key.strip()
【解决方案2】:

一个非常简单的版本

filename = 'test'
results = {}
with open(filename, 'r') as f:
    while (1):
        text = f.readline()
        if (text == ''):
            break
        elif (text[0] == "#"):
            key = text
            results[key] = ''
        else:
            results[key] += text

发件人(忽略额外的空行,答案格式的副产品):

#黎明前的吹笛者

*路西法山姆....

sksdlkdfslkj

dkdkfjoiupoeri

lkdsjforinewonre

#一大堆秘密

*让有

人们听到他说

生产:

{'#黎明门口的吹笛者\n': '*Lucifer sam....\nsksdlkdfslkj\ndkdkfjoiupoeri\nlkdsjforinewonre\n', '# A Saucerful of Secrets \n': '*Let there be \n人们听到他说\n'}

【讨论】:

    【解决方案3】:

    您可以如下使用 Python 的 groupby 函数:

    from itertools import groupby
    
    d = {}
    key = ''
    
    with open('input.txt', 'r') as f_input:
        for k, g in groupby(f_input, key=lambda x: x[0] == '#'):
            if k:
                key = next(g).strip(' #\n')
            else:
                d[key] = ''.join(g)
    
    print d
    

    这将为您提供以下类型的输出:

    {'The Piper at the gates of dawn': '*Lucifer sam....\nsksdlkdfslkj\ndkdkfjoiupoeri\nlkdsjforinewonre\n', 'A Saucerful of Secrets': '*Let there be\nPeople heard him say'}
    

    使用 Python 2.7.9 测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多