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

时间:2019-01-29 14:27:19

标签: python python-3.x raspberry-pi debian libgphoto2

我开始用Raspberry Pi 3B +和佳能6D创建一个新的3D扫描仪。由于有了gphoto2库,我有一部分Python代码来恢复图像,但是我无法更改恢复的图像的名称,目前,我有两个文件:capt0000.cr2和capt0000.jpg我必须将它们重命名为“ 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,因为每次它都是关于新图像的,因此权限返回到以下图像: https://imgur.com/VydSeAH

2 个答案:

答案 0 :(得分:0)

我猜这是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”运行脚本

答案 1 :(得分:0)

问题已解决,下面是解决方法:

主循环:

captureImageDownload()
renameFiles(ID)
createFolder()

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