首页 > 解决方案 > Python3 - 生成具有相同键名的关联数组

问题描述

考虑下面的循环,它遍历 PDF 中的每一页,读取文本,然后将 PDF 页面进一步划分为使用定义的列位置:

列位置定义如下(通过命令行):

'{"1":{"position":"15"}, "2":{"position": "20"}}'

这是我的脚本:

npages = 2  # Number of pages in the PDF.
column = {}


for n in range(npages):

    for i, col in enumerate(COLUMNS):
        out = [...] #The specific text from the PDF page, inside the defined column area
        column[i+1] = ({"row": str(out)})

现在,考虑我有一个两页长的 PDF 文件。它包含以下文本:

第 1 页:

Page 1 Col 1 Text                 Page 1 Col 2 Text

第2页:

Page 2 Col 1 Text                 Page 2 Col 2 Text

目前,我的代码将输出如下:

{  
   "1":{  
      "row":"Page 2 \u2013 Col 1.\n\n\f"
   },
   "2":{  
      "row":"Page 2 \u2013 Col 2\n\n\f"
   }
}

所以,理想情况下,我想做的是生成一个 JSON 输出,如下所示:

{  
   "1":[  
      {  
         "row":"Page 1 Col 1 Text"
      },
      {  
         "row":"Page 2 Col 1 Text"
      }
   ],
   "2":[  
      {  
         "row":"Page 1 Col 2 Text"
      },
      {  
         "row":"Page 2 Col 2 Text"
      }
   ],
}

所以基本上,列的边界将在所有页面之间共享 - 并且每列的内容必须添加到正确的列索引中,并且在每一\n新行上out,它应该进一步添加到row列索引内的索引中。

这甚至可以用 Python3 实现吗?我会更好地保存 PDF 文件的文本内容,然后根据文件夹中的每个文件创建 JSON 字符串吗?

标签: pythonjsonpython-3.x

解决方案


假设您的示例中的其他所有内容都有效 - 使用defaultdictcolumn附加您的信息。:

import collections
column = collections.defaultdict(list)
for n in range(npages):
    for i, col in enumerate(COLUMNS,1):
        out = [...] #The specific text from the PDF page, inside the defined column area
        column[i].append({"row": str(out)})

推荐阅读