【发布时间】:2019-04-29 19:37:42
【问题描述】:
我有一个大文件,我想通过匹配标题逐块读取它。 比如文件是这样的:
@header1
a b c 1 2 3
c d e 2 3 4
q w e 3 4 5
@header2
e 89 78 56
s 68 77 26
...
我写了一个这样的脚本:
with open("filename") as f:
line=f.readline()
if line.split()[0]=="@header1":
list1.append(f.readline().split()[0])
list2.append(f.readline().split()[1])
...
elif line.split()[0]=="@header2":
list6.append(f.readline().split()[0])
list7.append(f.readline().split()[1])
...
但它似乎只读取了第一个标题而没有读取第二个块。此外,这些块之间还有一些空行。当行匹配某些字符串时如何读取块并跳过那些空行。
我知道在 C 中,它会是 switch。如何在python中做类似的事情?
【问题讨论】:
-
您需要添加更多详细信息。这些多个空格分隔的文件段是否在一个文件中?
@header...是否保证按顺序连续编号?如果@header1单独出现,你为什么要测试line.split()[0]=="@header2"而不是简单的line == "@header2"?或者只是line.startswith('@header'),应该将它们全部捕获,甚至不需要正则表达式? -
最终我希望您想要读取以空格分隔的行内容(在每个部分中,根据其标题),因此您需要包装一个阅读器对象。或者分别编写一个生成器到
yield每个行块,这样你就可以将它传递给一个读取器对象。 -
“另外,这些块之间还有一些空行。” 那么,你保证空行只能出现在部分之外,而不是在里面吗?跨度>
标签: python