将文本文件输入程序

时间:2018-02-10 04:36:58

标签: python file input pdf-conversion

我正在处理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?

1 个答案:

答案 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#openhttps://docs.python.org/3.6/library/functions.html#open)。

简而言之,正如@idlehands所建议的那样,如果您同时安装了这两个版本,请尝试调用python3而不是python,并且此代码应该实际运行。

建议:我建议不要使用这样的交互式输入(除非有充分的理由这样做),而是让所需的文件名从外部传入。在这种情况下,我选择argparsehttps://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。

相关问题