我正在处理PDF生成器项目。目标是拥有一个获取文档文件并生成PDF文件的程序。我找不到将文件输入要转换的程序的方法。
我开始使用输入功能,我在终端输入文件。作为测试,我想输入,打开,读取和打印包含美国邮政编码数据的csv文件。程序的其余部分打开,读取并打印出一些数据。这是代码:
import csv
file = input("Drop file here: ")
with open(file, 'r', encoding='utf8') as zf:
rf = csv.reader(zf, delimiter=',')
header = next(rf)
data = [row for row in rf]
print(header)
print(data[1])
print(data[10])
print(data[100])
print(data[1000])
当我打开终端输入文件时,出现此错误(TypeError:' encoding'是此函数的无效关键字参数)。
有没有更好的方法可以编写程序来输入文件,以便它可以打开并转换为PDF?
答案 0 :(得分:0)
还有更多内容正在进行中,正如评论中所提到的,在这种情况下,您使用的是哪个版本的python非常相关。更多的背景故事。
内置的 input
在Python2(https://docs.python.org/2.7/library/functions.html#input)或Python3(https://docs.python.org/3.6/library/functions.html#input)中有不同的含义。在Python2中,它读取用户输入并尝试将其作为python代码执行,这不太可能是您真正想要的。
然后正如所指出的那样,开放论证也是不同的(https://docs.python.org/2.7/library/functions.html#open和https://docs.python.org/3.6/library/functions.html#open)。
简而言之,正如@idlehands所建议的那样,如果您同时安装了这两个版本,请尝试调用python3
而不是python
,并且此代码应该实际运行。
建议:我建议不要使用这样的交互式输入(除非有充分的理由这样做),而是让所需的文件名从外部传入。在这种情况下,我选择argparse
(https://docs.python.org/3.6/library/argparse.html#module-argparse)非常轻松地为您提供了极大的灵活性,例如myscript.py
:
#!/usr/bin/env python3
import argparse
import sys
parser = argparse.ArgumentParser(description='My script to do stuff.')
parser.add_argument('-o', '--output', metavar='OUTFILE', dest='out_file',
type=argparse.FileType('w'), default=sys.stdout,
help='Resulting file.')
parser.add_argument('in_file', metavar='INFILE', nargs="?",
type=argparse.FileType('r'), default=sys.stdin,
help='File to be processed.')
args = parser.parse_args()
args.out_file.write(args.in_file.read()) # replace with actual action
这使您能够将脚本作为通过管道输入和输出来运行,处理指定的文件以及明确使用-
来表示将使用stdin / stdout。 argparse
还免费为您提供命令行使用/帮助。
您可能希望针对不同的行为调整细节,但最重要的是,我仍然使用命令行参数。
编辑:我应该添加更多评论以供考虑。我编写执行所需操作的实际代码(函数或更复杂的对象),以便通过其接口公开输入/输出并编写命令行来收集这些位并用它调用我的操作代码。这样,您可以轻松地从另一个Python脚本重用它,或者在您需要/想要的时候为此编写GUI。