我正在尝试通过格式一致的文件进行解析:标题和多行文本(按空格分隔)。 当一行有一个值时,我想启动一个新的字典键,将以下几行读入一个列表列表,每个列表都是拆分词。 我首先尝试使用this来尝试使程序识别新标记并使用索引计数器设置新密钥。 然后,我最初使用this来相应地拆分行。
这是我的代码当前的样子:
import sys
def openfile(file):
frames = {}
index = 0
with open(file, 'r') as f:
for line in f:
if line.strip() == '5310':
index +=1
else:
newline = line
print newline
frames[index] = []
frames[index].append([newline.split()])
print frames
openfile(sys.argv[1])
索引将正确计数,并且'print newline'正在打印我想要的所有行,但是最终打印的字典是一个嵌套列表:
{1:[['last', 'line', 'of', 'input', 'file']]}
我想要的是:
{1:[[line1],[line2] ...], 2:[[nextline], [nextline] ...], ... , key n : [[line], [line]....[lastline]]}
我也尝试过:
def openfile(file):
frames = {}
index = 0
with open(file) as f:
for line in f:
if str(line.strip()) == '5310':
index += 1
else:
frames[index] = []
frames[index].append([line.split()])
return frames
这也不起作用。 这给我留下了两个问题: 1:为什么我的当前代码会打印但不添加我想要的行? 2.我还能尝试什么使它起作用?
编辑 谢谢!我设法使它起作用。 如果有人遇到类似的问题,这是我的代码可以正常工作:
import sys
def openfile(file):
frames = {}
index = 0
with open(file, 'r') as f:
for line in f:
if line.strip() == '5310':
index +=1
frames[index] = []
else:
newline = line
print newline
frames[index].append([newline.split()])
print frames
openfile(sys.argv[1])
答案 0 :(得分:1)
您的问题很明显...一旦看到问题:-)
frames[index] = []
frames[index].append([newline.split()])
每次循环时,您都要清除较早的进度,并从新的空白列表开始。因此,只有最后一次迭代的结果在frames
中。
在进入循环之前,初始化代码仅需执行一次。
with open(file) as f:
frames[index] = []
for line in f:
...或其他适合您的应用的点。