将文件os.rename()重命名为时间戳将返回奇怪的字符串

时间:2019-03-03 00:49:26

标签: linux python-2.7 python-os

因此,我尝试使用os.stat(“ file”)。st_stat将某些文件重命名为其创建日期的时间。然后,我弹出多余的信息,我只需要时间,因为它们已经按日期排列在带日期的文件夹中。代码有点像意大利面条,毕竟我还是个初学者。我使用了很多str(),因为有时我会从os.listdir()中获得“ None”对象,并且在尝试格式化字符串中的整数时遇到了一些错误。因此,问题在于它无法正常工作。我摆脱了所有错误,男孩还是很多,但是它没有重命名为时间戳。我得到类似“ 0R3IJL〜J”的信息。并且它随着时间戳而改变。这使我认为它与时间有某种关系,并且可以固定。

我要重命名的文件是.h264,我正在Raspberry Pi Zero W上使用Raspbian进行工作。

还有一些我得到的名字的例子: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 :(得分:0)

我想这将为您解决问题,但请记住,您将需要进行大量检查以使其更安全。我只是重写并简化了您的代码,而没有进行安全检查。

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("..")