【发布时间】:2021-09-03 12:54:00
【问题描述】:
我有一个由换行符或- 字符分隔的文本文件。
x = {"file_data":" Bakery\r\n Company GbR\r\n Oranienburger Straße 120\r\n 10119 Berlin\r\n\r\n\r\n\r\nBill no.3-7721 11:29:51 20.04.2021\r\n\r\n------------------------------------------\r\n1x Cappuccino 2,70€ 2,70€ A\r\n\r\n --------\r\n\r\nTotal 2,70€\r\n\r\nGiven (iZettle) 2,7€\r\n\r\n\r\n------------------------------------------\r\nUSt.% gross net USt.\r\nA=7% 2,70€ 2,52€ 0,18€\r\n\r\n\r\n\r\n Table: Counter\r\n Terminal: Terminal 1\r\nTSE-Transaktion 1831\r\nTSE-Signatur-Nr. 98009\r\nTSE-Start 2020-04-21T09:29:38.00000Z\r\nTSE-Stop 2020-04-21T09:29:50.00000Z\r\nTSE-Seriennummer 5f2897cc074ae841330658eadd324661159f53b7ffd29215\r\nTSE-Zeitformat utcTime\r\nTSE-Signatur bXkPffFOcetbFokYrOqr/7EYrAc0PH6r\r\nTSE-Hashalgorithmus ecdsa-plain-SHA256\r\nTSE Status In evaluation\r\n\r\n\r\n\r\n\r\n Ust-Id: DE11111111\r\n"}
我的任务是获取每个块的位置及其内容(块由多个换行符或包含分隔符- 的整行分隔)。
我编写了以下代码,并且能够获取除最后一个块之外的所有块。
这是我的代码,我在这里缺少什么?
y = x["file_data"]
z = y.split('\r\n')
block = []
block_content = []
start_row, start_col, end_row, end_col = None, None, None, None
skip_line_count = 0
for i, row in enumerate(z):
if any(letter.isalnum() for letter in row):
if not start_row and not start_col:
start_row = i
start_col = row.index(row.replace(" ", "")[0])
end_row = start_row
end_col = row.index(row.replace(" ", "")[-1])
else:
end_row = i
end_col = row.index(row.replace(" ", "")[-1])
elif all(letter in ["", "-"] for letter in row):
skip_line_count += 1
if skip_line_count == 2 and start_row != None and start_col != None:
block.append({
"start_row": start_row,
"start_col": start_col,
"end_row": end_row,
"end_col": end_col,
})
block_content.append(z[start_row : end_row + 1])
start_row, start_col, end_row, end_col = None, None, None, None
skip_line_count = 0
预期的block_content 结果应包含TSE Status In evaluation 作为块的一部分。
现在,最后一个block_content是
['USt.% gross net USt.', 'A=7% 2,70€ 2,52€ 0,18€']`
【问题讨论】:
-
看起来,当你完成 for 循环时,如果你已经确定了一个块的 startb,你应该将 end_row 设置为 z 的末尾并将数据附加到 block_content
-
感谢您指出。你能解释一下为什么
skip_line_count=4当i = 38时,它应该是2。我在这里有点困惑。从逻辑上讲,skip_line_count不应高于2。
标签: python python-3.x list algorithm dictionary