Как отсортировать список по дате создания? (Python - библиотека ОС) - PullRequest
1 голос
/ 18 апреля 2020

Я хотел бы переименовать список вырезок видео в папке (в моем случае / Desktop / Cuts /) из: xxx.mp4, yyy.mp4, ..., zzz.mp4 в: 1.mp4, 2.mp4, ..., 33.mp4.

1.mp4 будет видео, которое было впервые создано в папке. 2.mp4 будет вторым, et c.

То, что я делаю сейчас (см. Код ниже), переименовывает видео-сокращения в / Cuts /, но в соответствии с порядком, который я не понимаю и это определенно НЕ дата создания. (тоже не кажется алфавитным)

import os
path = '/Users/ntelmaut/Desktop/Cuts/'

i = 1
for file in os.listdir(path):

    new_file_name = "{}.mp4".format(i)
    os.rename(path + file, path + new_file_name)

    #print path + file
    i = i+1 

Я пытался сделать переменную из os.listdir(path) и применить функцию sorted (), но пока безрезультатно (я новичок ie на Python - извините).

Хотелось бы, чтобы указатель был здесь.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Раствор

import glob

import os
dirpath = '/Users/ntelmaut/Desktop/Cuts/'

files = glob.glob(os.path.join(path, '*.mp4'))   
files.sort(key=os.path.getmtime)

for i, filename in enumerate(files, 1):
    try:
       os.rename(filename, "{0}.mp4".format(i))
    except OSError as e:
       print("OSError: ", e)

0 голосов
/ 18 апреля 2020

Если я правильно понимаю, это то, что вы хотите.

import os
path = '/Users/ntelmaut/Desktop/Cuts/'

def sort_key(file):
    return os.stat(file).st_ctime

files = os.listdir(path)
sorted_files = sorted((os.path.join(path, f) for f in files), key=sort_key)

i = 1
for file in sorted_files:
    new_file_name = f"{i}.mp4"
    os.rename(file, new_file_name)
    i += 1

Более чистый способ - использовать модуль pathlib.

from pathlib import Path

p = Path('/Users/ntelmaut/Desktop/Cuts/')

def sort_key(path):
    return path.stat().st_ctime

sorted_files = sorted(p.iterdir(), key=sort_key)

for idx, file in enumerate(sorted_files, 1):
    new_name = f"{idx}.mp4"
    file.rename(p / new_name)
...