自动获取创建日期并将文件重命名为该日期

2024-10-03 00:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一种方法可以自动创建日期并将文件重命名为它。我用它编码了一点,但后来我出错了。错误为FileNotFoundError:[WinError 2]系统找不到指定的文件:“AutoDateRename”。其中AutoDateRename是我希望重命名文件进入的文件夹的名称。有办法做到这一点吗? 完全错误是:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\lucio\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "c:/Users/lucio/Documents/PythonWorkspace/FileAutoDateRename/script.py", line 21, in RenameDateCreated
    os.rename(rf'{E1_Val.get()}/{filename}',rf'{E1_Val.get()}/AutoDateRename/{time.ctime(os.path.getctime(filename))}')
  File "C:\Users\lucio\AppData\Local\Programs\Python\Python38-32\lib\genericpath.py", line 65, in getctime
    return os.stat(filename).st_ctime
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'AutoDateRename'

我的代码:

from tkinter import *
from tkinter import filedialog
import os.path, time
import os

window = Tk()
window.title("File Auto Date Rename")
window.geometry("500x300")
window.resizable(width=False,height=False)

E1_Val = StringVar()

def SelectFolder():
    window.filename = filedialog.askdirectory()
    E1.delete(0,"end")
    E1.insert(END,window.filename)

def RenameDateCreated():
    os.mkdir(f'{E1_Val.get()}/AutoDateRename')
    for filename in os.listdir(E1_Val.get()):
        os.rename(rf'{E1_Val.get()}/{filename}',rf'{E1_Val.get()}/AutoDateRename/{time.ctime(os.path.getctime(filename))}')

L1 = Label(text="Auto Date Rename",font='Helvetica 16 bold underline')
L1.pack()

L2 = Label(text="Folder Path",font='Helvetica 12 bold italic')
L2.pack(pady=5)

E1 = Entry(window,textvariable=E1_Val)
E1.pack(pady=5)

B1 = Button(window,text="Locate",height=1,width=5,command=SelectFolder)
B1.pack(pady=5)

L4 = Label(text="Rename Options",font='Helvetica 12 bold italic')
L4.pack(pady=5)

B2 = Button(window,text="Rename Using Date Created",height=1,width=25,command=RenameDateCreated)
B2.pack(pady=2)

B3 = Button(window,text="Rename Using Date Modified",height=1,width=25)
B3.pack(pady=2)

L5 = Label(text="Make sure that the folder you\nare converting is backed up in a safe location!",font='Helvetica 14 bold')
L5.pack(pady=15)

window.mainloop()

Tags: textinimportgetosvalfilenamewindow
1条回答
网友
1楼 · 发布于 2024-10-03 00:25:37

由于您在源目录(由E1_Val.get()返回)中创建了一个目录AutoDateRename,因此它将包含在由os.listdir()返回的列表中,我认为您不想重命名它。因此,您应该检查源文件是否是文件而不是目录

os.path.getctime(filename)应该是os.path.getctime(os.path.join(E1_Val.get(), filename))

另外time.ctime()可能会返回包含文件名中不允许使用的字符(如:)的字符串。请使用time.strftime()将时间格式化为有效文件名

以下是更新的RenameDateCreated()

def RenameDateCreated():
    srcdir = E1_Val.get().strip()
    if srcdir:
        destdir = os.path.join(srcdir, 'AutoDateRename') 
        os.makedirs(destdir, exist_ok=True) # create the directory if it does not exists
        for filename in os.listdir(srcdir):
            srcpath = os.path.join(srcdir, filename)
            if os.path.isfile(srcpath): # only process file, not directory
                ctime = time.strftime('%Y%m%d_%H%M%S', time.localtime(os.path.getctime(srcpath)))
                destpath = os.path.join(destdir, f'{ctime}_{filename}')
                os.rename(srcpath, destpath)

相关问题 更多 >