为什么我无法使用 os.listdir 在我的 Python 程序中更改我的文件名

Why I can't change the name of my files in my Python program using os.listdir

我开始用 Raspberry Pi 3B + 和 Canon 6D 创建一个新的 3D 扫描仪。由于 gphoto2 库,我有一部分 Python 代码可以恢复图像,但我无法更改恢复图像的名称,目前,我有两个文件:capt0000.cr2 和 capt0000.jpg I必须将它们重命名为 "time" + .jpg 或 .cr2 但不可能,它们从不更改名称。

我尝试了几种方法,目前我使用的是 os.listdir 功能,可以让我对桌面上的所有文件进行排序。

程序开始:

from time import sleep
from datetime import datetime
from sh import gphoto2 as gp
import signal, os, subprocess

shot_date = datetime.now().strftime("%d-%m-%Y")
shot_time = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
picID = "PiShots"
folder_name = shot_date + picID
save_location = "ScannerImages/" + folder_name

CaptureImageDownload = ["--capture-image-and-download"]
CaptureImage = ["--capture-image"]

函数:

def captureImageDownload():
    gp(CaptureImageDownload)

def captureImage():
    gp(CaptureImage)

def createFolder():
    try:
        os.makedirs(save_location)
    except:
        print("Failed to create folder")
    os.chdir(save_location)

def renameFiles(ID):
    for filename in os.listdir("."):
        if len(filename) < 13:
            if filename.endswith(".jpg"):
                os.rename(filename, (shot_time + ID + ".jpg"))
            print("Renamed the JPG")
        elif filename.endswith(".cr2"):
            os.rename(filename, (shot_time + ID + ".cr2"))
            print("Renamed the CR2")

主循环:

captureImageDownload()
createFolder()
renameFiles(ID)

现在我在桌面上创建了两个文件,请参见下图: https://i.imgur.com/DDhYe1L

是不是因为文件权限知道我不是root用户?如果是因为这样,如何更改一般文件类型的权限,例如 .jpg 因为每次都是关于一个新图像,所以权限 return 到下图: https://imgur.com/VydSeAH

我想这是 os.chdir(save_location) 的问题。您必须使用 complete 路径(参见 https://www.tutorialspoint.com/python/os_chdir.htm) 试试

path = os.path.join(os.getcwd(), save_location)
os.chdir(path)

如果您想在代码中更改文件权限,请使用 os.getcwd()(请参阅 https://www.tutorialspoint.com/python/os_chown.htm)。您可以通过 os.getuid() 获取您当前的 UID。所以添加到 renameFiles:

uid = os.getuid()
gid = os.getgid()
for filename in os.listdir("."):
    filepath = os.path.join(os.getcwd(), filename)
    os.getcwd(filepath, uid, gid)
    ....

因此所有文件都将属于当前用户。也许您需要 运行 您的脚本 "sudo"

问题已解决,这里是解决方案:

主循环:

captureImageDownload()
renameFiles(ID)
createFolder()

您只需在创建图像文件夹之前重命名文件即可。