如何循环遍历值列表,然后在 Python 中创建 PDF

问题描述 投票:0回答:1

我正在尝试使用 urllib 和 tableau_api_lib 提取数据,以根据 Tableau 中视图的筛选数据创建 PDF。我已经完成了该部分的工作,但我需要帮助循环遍历 ID 列表,然后创建一个字典(创建 PDF 所需的),然后根据这些参数,创建将 PDF 名称更改为与test_loop 中的 ID。我可以让它仅使用一条记录(没有循环)。

test_loop = ['202','475','78','20','10']

for item in test_loop:
    tableau_filter_value = parse.quote(item)
    pdf_params = {
    "pdf_orientation":"orientation=Landscape",
    "pdf_layout":"type=A4",
    "filter_vendor": f"vf_{tableau_filter_field}={tableau_filter_value}",

}


for params in pdf_params:
    with open('output{test}.pdf'.format(test=params),'wb') as file:
        file.write(conn.query_view_pdf(view_id = pdf_view_id, parameter_dict=params).content)
    

基本上,PDF 应命名为 output202.pdf,并且应具有来自上面 pdf_params 字典的与其关联的数据。所以输出,我期待这个列表有 5 个不同的 pdf。我对 python 有点陌生,所以任何东西都有帮助!

AttributeError:“str”对象没有属性“keys”

++++ tableau_filter_field 在此代码之前定义。

python for-loop pdf-generation tableau-api urllib
1个回答
0
投票

首先,我不认为创建 pdf 与创建 .txt 文件类似。您无法创建名为 a.pdf 的文件,然后获取 pdf 文件,就像处理 .txt 或 .csv 或其他任何文件一样。您可能会创建文件,但它们不会是 pdf 格式文件,而很可能是扩展名为 .pdf 的 txt 文件。

您可以在 pdf 上查看此线程 - 如何在 Python 中创建 PDF 文件

仅创建一条记录并不奇怪,因为每次循环相同的字典变量 pdf_params 都会被覆盖。 相反,你可以这样做。

list_of_params = list()
for item in test_loop:
    tableau_filter_value = parse.quote(item)
    pdf_params = {
    "pdf_orientation":"orientation=Landscape",
    "pdf_layout":"type=A4",
    "filter_vendor": f"vf_{tableau_filter_field}={tableau_filter_value}",

}
    list_of_params.append(pdf_params)

然后您可以迭代参数列表以填充到文件中:

for params in list_of_params:
    # write to pdf
代码中的

for params in pdf_params:
实际上会迭代 dict pdf_params 的键,因此会出现 str 属性的错误。

© www.soinside.com 2019 - 2024. All rights reserved.