Как использовать код Python, чтобы выбрать последний .txt для запуска в блокноте Jupyter (только код Python) - PullRequest
0 голосов
/ 27 апреля 2018

К вашему сведению, когда я впервые выполняю приведенный ниже код в своей записной книжке jupyter, он работает без проблем:

In  []: run txt2pdf.py Results/*.txt
Out []: Writing 'Results\A_2018_04_27_13_55.txt' with 80 characters per line and 
        60 lines per page...
        PDF document: 1 pages

Но во второй раз, я выполняю тот же код (хочу, чтобы он запускал последнюю версию .txt после того, как сгенерировал последнюю версию файла .txt), он не может работать:

In [] : run txt2pdf.py Results/*.txt
Out []: usage: txt2pdf.py [-h] [--font FONT] [--font-size FONT_SIZE]
              [--extra-vertical-space EXTRA_VERTICAL_SPACE]
              [--kerning KERNING] [--media MEDIA]
              [--minimum-page-length MINIMUM_PAGE_LENGTH] [--landscape]
              [--margin-left MARGIN_LEFT] [--margin-right MARGIN_RIGHT]
              [--margin-top MARGIN_TOP] [--margin-bottom MARGIN_BOTTOM]
              [--output OUTPUT] [--author AUTHOR] [--title TITLE]
              [--quiet] [--subject SUBJECT] [--keywords KEYWORDS]
              [--break-on-blanks] [--encoding ENCODING] [--page-numbers]
              [--line-numbers]
              filename
txt2pdf.py: error: unrecognized arguments: Results\A_2018_04_27_13_57.txt
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2

Любое полезное решение будет очень ценить! Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Просто дикая догадка - публикация в качестве ответа, потому что это не соответствует системе комментариев.

В первый раз у вас есть только один файл. Подстановочный знак в команде будет расширен до:

./txt2pdf.py Results/first_file.txt

Во второй раз у вас есть два файла, поэтому команда расширяется до:

./txt2pdf.py Results/first_file.txt Results/second_file.txt

И вы получаете ошибку, потому что txt2pdf не ожидает нескольких имен файлов (исходя из сообщения об ошибке, мы не можем точно знать, какой txt2pdf.py вы используете).

Если вы работаете в Unix-подобной ОС, вы можете попробовать модуль sh вместо этого (не проверено):

import sh
from glob import glob
import os

# commenting line by line
def get_last_txt(path):
    return sorted(                         # sort
        glob(path + '/*.txt'),             # all files in the folder
        key=lambda f: os.stat(f).st_mtime  # by modified time
    )[-1]                                  # return the last one

Тогда вы можете сделать это несколько раз:

sh.python('txt2pdf.py', get_last_txt("Results"))

Возможно, вам придется !pip install sh, если он еще не установлен.

Если вы работаете в Windows, перейдите в Магазин Windows и установите Ubuntu. Подсистема Linux для Windows фактически превращает компьютер Windows в достойную рабочую станцию ​​для разработки (лично я не люблю настольные компьютеры Linux и использую Mac или Windows с WSSL).

Если вы не хотите устанавливать Ubuntu из Магазина Windows, попробуйте заменить модуль sh на pbs - синтаксис немного отличается, поэтому вы должны проверить документацию или использовать этот хак вместо import sh выше этим (возможно, вам придется сначала !pip install pbs или conda install pbs):

try:
    import sh
except ImportError:
    # fallback: emulate the sh API with pbs
    import pbs
    class Sh(object):
        def __getattr__(self, attr):
            return pbs.Command(attr)
    sh = Sh()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...