栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python将文件和目录从一个文件夹移动到另一个文件夹

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python将文件和目录从一个文件夹移动到另一个文件夹

失败的原因:

for dirs,files in os.listdir(path):

…就是

os.listdir
返回文件名列表。因此,每个元素都是一个字符串,您正在尝试将该字符串分解为两个变量。比较一下:

a, b = (1, 2, 3, 4, 5, 6, 7, 8)for a, b in [(1, 2, 3, 4, 5, 6, 7, 8), (9, 10)]dirs, files = "spam.txt"for dirs, files in ["spam.txt", "eggs.dat"]

在每种情况下,这都是完全相同的错误-您无法将8项内容放入2个变量中。

同时,如果

listdir
仅返回文件名,您怎么知道常规文件名,目录名?您必须询问-例如通过使用
isdir

所以:

for filename in os.listdir(path):    if os.path.isdir(filename):        # do directory stuff    else:        # do regular file stuff

(但是请注意,如果您有符号链接,这仍然会令人困惑……)


同时,“常规文件内容”是什么意思?

好吧,假设你没有一个目录(或一个符号链接到一个目录)与作为文件你想搬到那里,因为文档的名称相同

shutil.move
的发言权,
os.rename
shutil.copy2
将被使用。如果您不在Windows上,那么这是完美的选择-
如果您有权覆盖目标,那么您将获得权限错误。但是,如果你
在Windows上,
os.rename
会如果目标已经存在失败。

如果您使用的是3.3或更高版本,则可以通过复制

shutil.move
源*并
os.replace
改为使用它来解决此问题,如
rename
文档所示。否则,您将必须在重命名源之前删除目标。

一些stdlib模块(包括

shutil
)旨在用作示例代码以及可用的帮助程序。在那种情况下,在模块文档的顶部,将有一个 Source pre:* 链接。


那“目录内容”呢?好吧,如果将目录移动

spam
到目标
eggs/spam
,并且
eggs/spam
已经作为目录存在,那么最终将移动到
eggs/spam/spam

这不足为奇,因为

mv
在Unix和
move
Windows上这是完全相同的,而这正是我们
shutil
要模拟的东西。

因此,您需要

shutil.rmtree
在移动源之前删除目标(这次使用)。


这意味着最简单的操作可能是不区分文件和目录,Windows和Unix或其他。只是这样做:

for filename in os.listdir(path):    target = os.path.join(compteurfolder, filename)    try:        shutil.rmtree(target)    except NotADirectoryError:        try: os.unlink(target)        except FileNotFoundError: pass    shutil.move(os.path.join(path, filename), target)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号