【问题标题】:Why I can't change the name of my files in my Python program using os.listdir为什么我不能使用 os.listdir 在我的 Python 程序中更改我的文件名
【发布时间】:2019-01-29 14:27:19
【问题描述】:

我开始使用 Raspberry Pi 3B + 和 Canon 6D 创建新的 3D 扫描仪。由于 gphoto2 库,我有一部分 Python 代码来恢复图像,但我无法更改恢复图像的名称,目前,我有两个文件:capt0000.cr2 和 capt0000.jpg 我必须将它们重命名为“时间" + .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

【问题讨论】:

  • 你能把图片放在问题中而不是放在 imgur 的链接中吗?并非所有人都可以访问图片托管网站
  • 我认为问题在于您正在更改 createFolder() 函数中的目录,以便在您 os.listdir(".") 时列出 that 文件夹中的文件。
  • @C.Nivs 抱歉,我不能发布图片,因为我是新用户。
  • @Ross 我刚刚尝试删除创建文件夹的功能,但我仍然没有更改文件的名称。
  • os.listdir(".") 时为什么不打印出每个文件名,以确保您在正确的文件夹中?这将帮助您调试。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题解决了,解决办法如下:

    主循环:

    captureImageDownload()
    renameFiles(ID)
    createFolder()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      相关资源
      最近更新 更多