![](/img/trans.png)
[英]Python script with open('filename') works with IDLE but doesn't work in console
[英]Python script works when executed in IDLE, but not in console
系统操作系统:Windows 10
首先,我在PATH
有 python,所以这不是问题。 其他脚本从控制台正常工作。
从.csv
文件中读取参数,并在.PDF
填写相应的注释字段
在 Python 的 IDLE 中执行脚本时,会创建输出 pdf 文件。 但是,从控制台打开脚本时不会创建 pdf 文件。
我认为它必须与Current Working Directory
和我的相对路径有关。 这就是为什么我添加了这一行:
os.chdir(os.getcwd().replace(os.sep, '/'))
然而,这似乎没有帮助。
完整的 Python 脚本:
#! /usr/bin/python
import os , pdfrw , csv
INPUT_CSV_PATH = 'Tested_parameters.csv'
INVOICE_TEMPLATE_PATH = 'Input_template.pdf'
INVOICE_OUTPUT_PATH = 'output_document.pdf'
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_FIELD_NAME = '/TU'
ANNOT_VAL_KEY = '/V'
ANNOT_RECT_KEY = '/Rect'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'
def write_fillable_pdf(input_pdf_path, output_pdf_path, data_dict):
template_pdf = pdfrw.PdfReader(input_pdf_path)
annotations = template_pdf.pages[1][ANNOT_KEY]
for annotation in annotations:
if annotation[SUBTYPE_KEY] == WIDGET_SUBTYPE_KEY: # '/Subtype': '/Widget'
if annotation[ANNOT_FIELD_KEY]: # '/T'
key = annotation[ANNOT_FIELD_KEY][1:-1]
if key in data_dict.keys():
if (key[0:4] == 'check'):
annotation.update( pdfrw.PdfDict( V=data_dict[key], AS=data_dict[key]) )
else:
annotation.update( pdfrw.PdfDict(AP=data_dict[key], V=data_dict[key], F=0) )
pdfrw.PdfWriter().write(output_pdf_path, template_pdf)
def Inport_csv_to_dict(input_pdf_path):
with open(input_pdf_path,encoding="utf-8-sig") as fh:
rd = csv.DictReader(fh, delimiter=',')
for row in rd:
data_dict = row
return data_dict
if __name__ == '__main__':
os.chdir(os.getcwd().replace(os.sep, '/'))
data_dict = Inport_csv_to_dict(INPUT_CSV_PATH)
write_fillable_pdf(INVOICE_TEMPLATE_PATH, INVOICE_OUTPUT_PATH, data_dict)
好吧,这对我来说有点愚蠢,但现在它起作用了。
我有#! /usr/bin/python
#! /usr/bin/python
在我脚本的第一行。 所以控制台用 python 2 运行脚本。
我删除了第一行,它可以正常工作(使用 Python 3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.