在Python中重命名所有文件的名称

# -*- coding:utf-8-*-

import os
import time
import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("version", help="Enter your package version")
    args = parser.parse_args()

    rootdir = os.getcwd()
    list = os.listdir(rootdir)

    #default version = 1.1.0
    version = '1.1.0'
    if args.version:
        version = args.version

    for line in list:
        times = time.strftime("%Y%m%d",time.localtime())
        list = ['ABCD', 'android', version, 'abcd', times]
        st = '_'
        result = st.join(list) + '.apk'

        origin_file = os.path.join(rootdir, line)
        print(origin_file)
        new_file = os.path.join(rootdir, result)
        print(new_file)
        os.rename(origin_file, new_file)

if __name__ == "__main__":
   main()

尝试在脚本之后将所有文件重命名为目录中的特定名称。

但是,这里的错误:

回溯(最近一次通话最后):

文件“rename-apk.py”,第31行,in

os.rename(origin_file,new_file)

OSError:[Errno 20]不是目录

在这里输入图像描述


我猜你正在使用Pycharm, .idea文件夹是根据文档 -

项目设置

项目设置与每个特定项目一起存储为.idea文件夹下的一组xml文件 。 如果您指定了默认项目设置,这些设置将自动用于每个新创建的项目。

(强调我的)

文件/文件夹. 在名称的开头默认是隐藏的。

无论如何, .idea文件夹不是问题。 如果您尝试重命名任何其他目录,也会发生此问题。

这个问题主要是由于你如何创建文件名而引起的,你使用的times在整个程序执行过程中都是不变的,因为你只需要年,月和日。

所以基本上,你正在为列表中的每个文件创建完全相同的结果名称。

你得到的错误是因为你改名为 - ABCD_android_1.1.22_abcd_20150903.apk ,这是一个文件。

然后,您正在尝试将.idea (这是一个目录)重命名为ABCD_android_1.1.22_abcd_20150903.apk ,它最初是一个文件,因为这是不可能的,您会收到错误 - Not a Directory

由于os.rename工作方式,你甚至可能丢失了很多.apk

将文件或目录src重命名为dst。 如果dst是一个目录,则会引发OSError。 在Unix上,如果dst存在并且是一个文件, 那么如果用户有权限它将被静默地替换。

(强调我的)

您应该以某种方式为每个.apk创建唯一的文件名。 也许你可以在新文件名中包含原始文件名,或者你应该把时间戳记设置为微秒(你可以使用日期时间模块,而微秒内使用%f格式)(即使计算机也在运行快速,你可能会遇到这个问题或得到错误)。

此外,您可能不想替换所有文件,如果是这样,您应该考虑添加一些条件来检查要替换的文件。 例如,如果您只想重命名.apk文件,则可以添加如下条件 -

if line.endswith('.apk'):

作为循环内部的第一行,以及其他代码块内的代码。

此外,您可能不想使用list作为变量名称,因为它会隐藏内置函数list() 。 你不应该重复使用相同的变量名,就像你现在正在使用list

链接地址: http://www.djcxy.com/p/9257.html

上一篇: Rename all files's name in Python

下一篇: platform Audio Playback in Python