在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
。