如何读取以"#"开头的特定行来自python中的文件

时间:2016-01-16 11:03:38

标签: python file dictionary

我怎样才能读到以"#"开头的特定行?从python中的文件和 将该行设置为字典中的键(不包含"#")并将该行后的所有行设置为下一行"#"作为一个值是字典 请帮帮我 这是文件:

01

3 个答案:

答案 0 :(得分:2)

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'下。

答案 1 :(得分:0)

非常简单的版本

code

从(忽略其他空白行,答案格式的副产品):

在黎明之门的吹笛者

*路西法山姆....

sksdlkdfslkj

dkdkfjoiupoeri

lkdsjforinewonre

#A Chacerful of Secrets

*让它有

人们听到他说

产地:

{' #Phoper在黎明的大门上\ n' *' * Lucifer sam .... \ nsksdlkdfslkj \ ndkdkfjoiupoeri \ nlkdsjforinewonre \ n','#一点点秘密\ n':' *让他们听到他说\ n'}

答案 2 :(得分:0)

您可以使用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进行测试