Путаница при использовании argparse в Python - PullRequest
0 голосов
/ 17 июня 2020

Я хотел бы выполнить код, доступный по этой ссылке . Цель кода - прочитать и извлечь аннотацию pdf.

Однако я не уверен, как указать путь к файлу pdf с помощью argparse, который, как я подозреваю, должен быть следующим argparse .

p.add_argument("input", metavar="INFILE", type=argparse.FileType("rb"),
                   help="PDF files to process", nargs='+')

Скажем, я знаю, что абсолютный путь к файлу pdf следующий;

C:\abc.pdf

Кроме того, учитывая, что я все еще пытаюсь понять код, поэтому я хотел бы чтобы избежать повторного ввода пути C: \ ab c .pdf снова и снова. Есть ли способ, я могу временно жестко запрограммировать его в def parse_args()

Я прочитал несколько веток об этом c, однако все еще испытываю трудности с пониманием этой проблемы.

Заранее благодарим за любую информацию.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы добавляете аргумент в синтаксический анализатор:

import argparse

p = argparse.ArgumentParser()
p.add_argument("input", metavar="INFILE", type=argparse.FileType("rb"),
               help="PDF files to process", nargs='+')
args = p.parse_args()

Тогда args.input будет кортежем из одного или нескольких дескрипторов открытых файлов.

1 голос
/ 17 июня 2020

Если вы запускаете pdfannots.py из командной строки, то вы делаете это, например,

python pdfannots.py C:\abc.pdf

Если вы хотите запустить его для нескольких файлов PDF, вы делаете это как, например,

python pdfannots.py C:\abc.pdf D:\xyz.pdf E:\foo.pdf

Если вы действительно хотите жестко закодировать путь, вам придется отредактировать pdfannots.py следующим образом:


def parse_args():
    p = argparse.ArgumentParser(description=__doc__)

    # p.add_argument("input", metavar="INFILE", type=argparse.FileType("rb"),
                   # help="PDF files to process", nargs='+')

    g = p.add_argument_group('Basic options')
    g.add_argument("-p", "--progress", default=False, action="store_true",
                   help="emit progress information")
    g.add_argument("-o", metavar="OUTFILE", type=argparse.FileType("w"), dest="output",
                   default=sys.stdout, help="output file (default is stdout)")
    g.add_argument("-n", "--cols", default=2, type=int, metavar="COLS", dest="cols",
                   help="number of columns per page in the document (default: 2)")

    g = p.add_argument_group('Options controlling output format')
    allsects = ["highlights", "comments", "nits"]
    g.add_argument("-s", "--sections", metavar="SEC", nargs="*",
                   choices=allsects, default=allsects,
                   help=("sections to emit (default: %s)" % ', '.join(allsects)))
    g.add_argument("--no-group", dest="group", default=True, action="store_false",
                   help="emit annotations in order, don't group into sections")
    g.add_argument("--print-filename", dest="printfilename", default=False, action="store_true",
                   help="print the filename when it has annotations")
    g.add_argument("-w", "--wrap", metavar="COLS", type=int,
                   help="wrap text at this many output columns")

    return p.parse_args()


def main():
    args = parse_args()

    global COLUMNS_PER_PAGE
    COLUMNS_PER_PAGE = args.cols

    for file in [open(r"C:\Users\jezequiel\Desktop\Timeline.pdf", "rb")]:
        (annots, outlines) = process_file(file, args.progress)

        pp = PrettyPrinter(outlines, args.wrap)

        if args.printfilename and annots:
            print("# File: '%s'\n" % file.name)

        if args.group:
            pp.printall_grouped(args.sections, annots, args.output)
        else:
            pp.printall(annots, args.output)

    return 0

...