1 つのファイルは次のようになります。
BEGIN_META
stuff
to
discard
END_META
BEGIN_DB
header
to
discard
data I
wish to
extract
END_DB
cat
それらすべてが一緒になった無限のストリームを解析できるようにしたいと思いますre.findall('something useful', '\n'.join(sys.stdin), re.M)
。
以下は私の試みですが、ジェネレーターを強制的に返さget_raw_table()
なければならないため、要件に完全には適合しません。強制を削除すると、返されたジェネレーターが空かどうかをテストできないため、が空かどうかを確認できませんsys.stdin
。
def get_raw_table(it):
state = 'begin'
for line in it:
if line.startswith('BEGIN_DB'):
state = 'discard'
elif line.startswith('END_DB'):
return
elif state is 'discard' and not line.strip():
state = 'take'
elif state is 'take' and line:
yield line.strip().strip('#').split()
# raw_tables is a list (per file) of lists (per row) of lists (per column)
raw_tables = []
while True:
result = list(get_raw_table(sys.stdin))
if result:
raw_tables.append(result)
else:
break