Переименование файлов os.rename () во временные метки возвращает странную строку - PullRequest
0 голосов
/ 03 марта 2019

Итак, я пытаюсь переименовать некоторые файлы в то время, когда они были созданы, используя os.stat ("file"). St_stat.Затем я выскакиваю лишнюю информацию, мне нужно только время, потому что они уже отсортированы по дате в папках с датами.Код является своего рода спагетти, я все еще новичок в конце концов.Я использую так много str (), потому что иногда я получаю объекты 'None' из os.listdir (), и у меня возникает ошибка при попытке отформатировать целые числа в строках.Так что проблема в том, что он не работает должным образом.Я избавился от всех ошибок, и их было много, но это не переименовывает метку времени.Я получаю такие вещи, как это "0R3IJL ~ J".И это меняется с отметкой времени.Это заставляет меня думать, что оно каким-то образом связано со временем и может быть исправлено.

Файлы, которые я пытаюсь переименовать, - это .h264, и я работаю над Raspbian, на Raspberry Pi Zero W.

Вот еще несколько примеров имен, которые я получаю: 06RR8I ~ Y, 0OFKLJ ~ J, 0O5KZV ~ I, 0PJJ0D ~ V.

import os
import datetime


dates = []
for i in range(1,7):
    if 1 <= i <= 6:
        i = "0{}".format(str(i))
    for j in range(1,31):
        if 1 <= j <= 9:
            j = "0{}".format(str(j))
        dates.append("2019-{}-{}".format( i, j))


for dt in dates:
    if os.path.exists(str(dt)):
        os.chdir(str(dt))
        for fil in os.listdir("."):
            created = os.stat(str(fil)).st_ctime
            da_cr = str(datetime.datetime.fromtimestamp(created))
            print type(da_cr)
            li_cr = list(da_cr)
            if li_cr[-7] == ".":
                for i in range(7):
                    li_cr.pop(-1)
            for i in range(11):
                li_cr.pop(0)
            nn = "".join(l_c for l_c in li_cr)
            print fil
            os.rename(fil, str(nn))
        os.chdir("../")

1 Ответ

0 голосов
/ 03 марта 2019

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

import os
from datetime import datetime

dates = []
for i in range(1, 7):
    for j in range(1, 31):
        dates.append("2019-%0.2d-%0.2d" % (i, j))

for date in dates:
    if os.path.exists(date):
        os.chdir(date)
        for filename in os.listdir("."):
            timestamp = datetime.fromtimestamp(os.stat(filename).st_ctime)
            os.rename(filename, timestamp.time())
        os.chdir("..")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...