Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python重命名文件夹中的多个文件?_Python_File_Python 3.x_Rename_File Rename - Fatal编程技术网

如何使用python重命名文件夹中的多个文件?

如何使用python重命名文件夹中的多个文件?,python,file,python-3.x,rename,file-rename,Python,File,Python 3.x,Rename,File Rename,“我的文档”中有1000多个文件夹。每个文件夹中只有4张照片需要按顺序命名为“北”、“东”、“南”和“西”。目前它们被命名为DSC_XXXX。我已经写了这个脚本,但它没有执行 import sys, os folder_list = [] old_file_list = [] newnames = [North, South, East, West] for file in os.listdir(sys.argv[1]): folder_list.append(file) for

“我的文档”中有1000多个文件夹。每个文件夹中只有4张照片需要按顺序命名为“北”、“东”、“南”和“西”。目前它们被命名为DSC_XXXX。我已经写了这个脚本,但它没有执行

import sys, os

folder_list = []
old_file_list = []
newnames = [North, South, East, West]

for file in os.listdir(sys.argv[1]):
    folder_list.append(file)

 for i in range(len(folder_list)):
    file = open(folder_list[i], r+)
    for file in os.listdir(sys.argv[1] + '/' folder_list[i]):
       old_file_list.append(file)
       os.rename(old_file_list, newnames[i])

我的想法是获取1000个文件夹的所有名称,并将它们存储在文件夹列表中。然后打开每个文件夹并将4个图片名称保存在旧文件列表中。从那里我想使用os.rename(old_file_list,newnames[I])将这4张照片重命名为东北-南和西部。然后我想让它循环查找“我的文档”中的尽可能多的文件夹。我是python新手,如有任何帮助或建议,将不胜感激

您不需要所有列表,只需动态重命名所有文件即可

import sys, os, glob

newnames = ["North", "South", "East", "West"]

for folder_name in glob.glob(sys.argv[1]):
    for new_name, old_name in zip(newnames, sorted(os.listdir(folder_name))):
       os.rename(os.path.join(folder_name, old_name), os.path.join(folder_name, new_name))

下面是我使用[1]的方法:


[1] 免责声明:
antipathy
是我的一个项目

如果新名称“按顺序”应用,您需要首先对文件夹的内容进行排序,因为
os.listdir
返回任意顺序的
列表
。另外,您可以直接在
文件夹列表
上迭代,而不是使用
范围(len())
来处理索引。哦,
os.listdir()
已经返回了一个
列表
,所以您不需要迭代它并构建一个新的列表。只需保存对它的引用:
folder\u list=os.listdir(sys.argv[1])
。。。尽管你用循环变量屏蔽了它。谢谢,但是我很困惑。如果我不需要列表,如何定义旧名称和文件夹名称?在操作这些名称之前,我是否不必循环并创建所有这些名称的列表?我试着按原样运行上面的代码,但没有成功。如果你能解释得更详细些,我会很感激的。为什么不立即重命名这些文件呢?谢谢,现在我收到一个错误,提示'for folder_name in glob.glob(sys.argv[1]):indexer错误:列表索引超出范围。对os.listdir(“.”)中的文件夹名称有什么想法吗?
:如果文件夹名称!='boyaakaa.py':
^我将glob.glob(sys.argv[1])改为os.listdir(“.”):并添加了一个if语句,这样程序就不会试图编辑.py脚本,而且它工作起来没有问题,谢谢Dan ya da manIs喜欢2.x的
pathlib
。@Kevin:类似。它同时适用于2.x和3.x,以及子类
bytes
/
str
/
unicode
# untested

from antipathy import Path

def check_folder(folder):
    "returns four file names sorted alphebetically, or None if file names do not match criteria"
    found = folder.listdir()
    if len(found) != 4:
        return None
    elif not all(fn.startswith('DSC_') for fn in found):
        return None
    else:
        return sorted(found)

def rename(folder, files):
    "rename the four files from DSC_* to North East South West, keeping the extension"
    for old, new in zip(files, ('North', 'East', 'South', 'West')):
        new += old.ext
        folder.rename(old, new)

if __name__ == '__main__':
    for name in Path.listdir(sys.argv[1]):
        if not name.isdir():
            continue
        files = check_folder(name)
        if files is None:
            continue
        rename(name, files)