【发布时间】:2016-04-21 22:34:24
【问题描述】:
【问题讨论】:
-
首先不要发布图片,而是复制粘贴。同时向我们展示您是如何尝试解决此问题的。
-
那么我怎样才能显示文件的信息呢?
-
您可以将文件的数据粘贴到您的问题中并将其放入代码块中(通过选择数据并单击
{}按钮)以保留格式。
标签: python file dictionary
【问题讨论】:
{} 按钮)以保留格式。
标签: python file dictionary
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()。
一个非常简单的版本
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'}
【讨论】:
您可以如下使用 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 测试
【讨论】: