【问题标题】:Why the last text block is not coming in the block content?为什么最后一个文本块没有出现在块内容中?
【发布时间】: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


【解决方案1】:

感谢@itprorh66 的评论,我找到了最后一个缺失的逻辑。我必须在循环结束后添加块和块内容追加。

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多