【问题标题】:How can i rename an android phone's .jpg file in a specific pattern using python 3?如何使用 python 3 以特定模式重命名 android 手机的 .jpg 文件?
【发布时间】:2016-10-09 19:27:58
【问题描述】:

我对使用 Python 3 进行编程还是很陌生,对它几乎一无所知。有人告诉我,Python 既强大又易于学习。

现在我正在尝试将我的 android 手机中的一些 .jpg 文件重命名为某种模式。我的 Android 手机上的普通 .jpg 文件(用相机拍摄)的通常模式如下所示:YYYYMMDD_hhmmss.jpg 我正试图将其更改为这种模式:YYYY-MM-DD hh-mm-ss.jpg

这是我目前写的代码:

import re
import os

for filename in os.listdir(".") #here is the path to the .jpg files
    m = re.match(r"(\d{8})_(\d{6})\.jpg", filename)
    if m:
        newname = (r"(\d{4})-(\d{2})-(\d{2}) (\d{2})-(\d{2})-(\d{2})\.jpg)
        if not os.path.exists(newname):
            os.rename(filename, newname)

当我运行程序时,shell 本身并没有真正向我显示错误消息。 它只是这样说:

=====RESTART:(指向我的代码写入的.py文件的路径)======

之后我通过 Python Shell 运行调试器,它说:

KeyError:(, '(\d{8})_(\d{6})\.jpg'0) (在 调试器)

_tkinter.TclError: invalid command name ".47860048.41027664.41027120"(调试后在shell中)

我不知道这意味着什么或我能做些什么来完成这项工作。

提前感谢我可能得到的每一个答案。

【问题讨论】:

    标签: regex python-3.x renaming


    【解决方案1】:

    你应该使用re.subbackreference

    import re
    import os
    
    FOLDER_PATH = "."   #set your path here
    for filename in os.listdir(FOLDER_PATH):    
        newname = re.sub("(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})\.jpg"
                    , r"\1-\2-\3 \4-\5-\6.jpg"
                    , filename)
        if (newname != filename and (not os.path.exists(os.path.join(FOLDER_PATH, newname)))):
            os.rename(os.path.join(FOLDER_PATH, filename), os.path.join(FOLDER_PATH, newname))
    

    【讨论】:

    • 感谢您的快速帮助。我只是尝试使用您的代码,它似乎可以工作,但由于某种原因它找不到文件。但它必须知道我希望它重命名什么文件,因为程序只说明它搜索的模式
    • --> 以及文件所在的路径。它在错误消息中显示它知道它正在尝试重命名的文件,因为它显示了我试图重命名的文件的确切名称。
    • 感谢@yosefrow 的评论和您的编辑建议。我拒绝您的编辑,因为 IMO 如果 OP 想要提高他的正则表达式技能,他应该使用上述关键字搜索自己
    • @TheHero2805 代码似乎没问题。你能显示你的新错误信息吗?
    • @PhamX.Bach 当然可以。这是我运行代码后出现在 python shell 中的内容。 FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden: '20160606_170101.jpg' -> '2016-06-06 17-01-01.jpg' [WinnError 2] 后面的句子表示系统找不到提到的文件。
    猜你喜欢
    • 2016-10-08
    • 2017-09-19
    • 2017-09-30
    • 2014-05-27
    • 2012-10-13
    • 2020-01-27
    • 2012-09-21
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多