Список Каталог файлов в текстовый файл, отсортированный по дате создания, но не показывает дату создания в файле - PullRequest
1 голос
/ 25 марта 2019

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

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

#create list of clips to merge
save_path = 'downloads/'
ignored = 'test.bat','mergeclips.bat','draw.bat'
onlyfiles = [f for f in listdir('downloads/') if isfile(join('downloads/', f)) if f not in ignored]

with open('downloads/clipstomerge.txt', 'w') as f:
    for item in onlyfiles:
        f.write("file '%s'\n" % item )

Этот код игнорирует файлы bat, но перечисляет все остальное в текстовом файле в формате, готовом для ffmpeg для объединения клипов. Формат текстового файла выглядит следующим образом:

file 'ARandomClipName.mov'
file 'Butterflies.mov'
file 'Chickens.mov'

На данный момент файлы отсортированы в алфавитном порядке, но я бы хотел, чтобы они сортировались по дате создания. У кого-нибудь есть идеи, как я могу изменить свой код, чтобы исправить мою проблему?

1 Ответ

1 голос
/ 25 марта 2019

Я хотел бы подойти к этой проблеме следующим образом, используя функции listdir () и getcttime () и осмысление списков модуля os.Как показано ниже:

combo = [(os.path.getctime(x), x) for x in os.listdir()]
combo
Out[42]: 
[(1549321055.8699787, 'AncmtNavSecLevPageResources_en.pov'),
 (1549321046.853063, 'AncmtNavSecLevPageResources_es_US.pov'),
 (1549321055.8855789, 'EcsNavSecLevPageResources_es_US.pov'),
 (1549321047.3054688, 'GlobalNavFlyOutResources.pov'),
 (1549321046.8842635, 'GlobalNavFlyOutResources_en.pov'),
 (1549321046.4942584, 'GlobalNavFlyOutResources_es_US.pov'),
 (1549321046.5254588, 'WebChatAvailResources.pov'),
 (1549321047.2430682, 'WebChatAvailResources_es_US.properties')]

Теперь, если вам нужно запретить файлы .bat, вы можете использовать условие:

combo = [(os.path.getctime(x), x) for x in os.listdir() if '.properties' not in x]
combo
Out[45]: 
[(1549321055.8699787, 'AncmtNavSecLevPageResources_en.pov'),
 (1549321046.853063, 'AncmtNavSecLevPageResources_es_US.pov'),
 (1549321055.8855789, 'EcsNavSecLevPageResources_es_US.pov'),
 (1549321047.3054688, 'GlobalNavFlyOutResources.pov'),
 (1549321046.8842635, 'GlobalNavFlyOutResources_en.pov'),
 (1549321046.4942584, 'GlobalNavFlyOutResources_es_US.pov'),
 (1549321046.5254588, 'WebChatAvailResources.pov')]

Затем просто отсортируйте свой список, используя функцию sort () (ergo combo.sort () в этом случае).В какие моменты вы можете просто распечатать список по порядку.Который должен поместить ваши файлы на основе даты их создания.

Как применить это к исходному коду

import os
save_path = 'C:\Python37' #here you need to enter the FULL path for your folder
os.chdir(save_path)
combo = [(os.path.getctime(x), x) for x in os.listdir() if '.bat' not in x]
combo.sort() #will sort the index, which is the created timestamp


with open("targetFile.txt", 'w') as f:
    for file in range(0, len(combo)):
        f.write('file: ' + combo[file][1] + '\n')

Комбинированная переменная содержит следующее:

[(1547253963.0511992, 'LearnPythonEx4.py'),
 (1547253963.0862029, 'LearnPythonEx5.py'),
 (1547253963.1162057, 'LearnPythonEx6.py'),
 (1547253963.137208, 'LearnPythonEx7.py'),
 (1547253964.490343, 'LICENSE.txt'),
 (1547253965.6564598, 'NEWS.txt'),
 (1547253966.5165458, 'python.exe'),
 (1547253966.5725515, 'python3.dll'),
 (1547253966.8515792, 'python37.dll'),
 (1547253966.9225864, 'pythonw.exe'),
 (1547253967.0145955, 'vcruntime140.dll')]

Пример содержимого файла:

file: LearnPythonEx4.py
file: LearnPythonEx5.py
file: LearnPythonEx6.py
file: LearnPythonEx7.py
file: LICENSE.txt
file: NEWS.txt
file: python.exe
file: python3.dll
file: python37.dll
file: pythonw.exe
file: vcruntime140.dll
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...