Дата Порядковый Выход?

Фактически shutil.make_archive может создавать однофайльный архив! Просто перейдите к целевому каталогу как root_dir и укажите имя файла как base_dir.

Попробуйте следующее:

import shutil

file_to_zip = 'test.txt'            # file to zip
target_path = 'C:\\test_yard\\'     # dir, where file is

try:
    shutil.make_archive('archive', 'zip', target_path, file_to_zip)
except OSError:
    pass

20
задан Regexident 21 May 2013 в 14:18
поделиться

5 ответов

Или укоротить ответ Давида:

if 4 <= day <= 20 or 24 <= day <= 30:
    suffix = "th"
else:
    suffix = ["st", "nd", "rd"][day % 10 - 1]
37
ответ дан 29 November 2019 в 22:30
поделиться

Вот более общее решение:

def ordinal(n):
    if 10 <= n % 100 < 20:
        return str(n) + 'th'
    else:
       return  str(n) + {1 : 'st', 2 : 'nd', 3 : 'rd'}.get(n % 10, "th")
29
ответ дан 29 November 2019 в 22:30
поделиться

За исключением 1-го, 2-го и 3-го, я думаю, что они все просто добавляют ... 4-е, 5-е, 6-е , 11, 21 ... ой, ой; -)

Я думаю, это может сработать:

def ordinal(num):
     ldig = num % 10
     l2dig = (num // 10) % 10
     if l2dig == 1:
         suffix = 'th'
     elif ldig == 1:
         suffix = 'st'
     elif ldig == 2:
         suffix = 'nd'
     elif ldig == 3:
         suffix = 'rd'
     else: 
         suffix = 'th'
     return '%d%s' % (num, suffix)
1
ответ дан 29 November 2019 в 22:30
поделиться

Здесь словари используются либо как функция, либо как лямбда ...

Если вы посмотрите на словари в обратном направлении, вы можете прочитать это как. ..

Все заканчивается на "th"

... если оно не заканчивается на 1, 2 или 3, тогда оно заканчивается на "st", "nd" или "rd"

... если только он заканчивается на 11, 12 или 13, затем на «th», «th» или «th»

# as a function
def ordinal(num):
    return '%d%s' % (num, { 11: 'th', 12: 'th', 13: 'th' }.get(num % 100, { 1: 'st',2: 'nd',3: 'rd',}.get(num % 10, 'th')))

# as a lambda
ordinal = lambda num : '%d%s' % (num, { 11: 'th', 12: 'th', 13: 'th' }.get(num % 100, { 1: 'st',2: 'nd',3: 'rd',}.get(num % 10, 'th')))
2
ответ дан 29 November 2019 в 22:30
поделиться

Вот еще более короткое общее решение:

def foo(n):
    return str(n) + {1: 'st', 2: 'nd', 3: 'rd'}.get(4 if 10 <= n % 100 < 20 else n % 10, "th")

Хотя другие решения, приведенные выше, вероятно, легче понять с первого взгляда, это работает так же хорошо, когда используется немного меньше кода.

0
ответ дан 29 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: