python递归实现文件复制_在python中递归复制文件或目录
python似乎有复制文件的功能(如shutil.copy)和复制目录的功能(如shutil.copytree),但我没有找到同时处理这两者的功能。当然,检查您是想复制一个文件还是一个目录是很简单的,但这似乎是一个奇怪的遗漏。
是否真的没有像unix cp -r命令那样工作的标准函数,即支持目录、文件和递归复制?在Python中,解决这个问题最优雅的方法是什么?
是的,这真是一团糟。其中一个地方,通过尝试反映底层系统调用,python使可见接口变得更糟。虽然在复制文件和复制树之间切换并不困难,但这不应该是必需的。也许在python bug tracker上提交一个增强请求,允许copytree复制一个文件?
我建议您首先调用shutil.copytree,如果抛出异常,则使用shutil.copy重试。
import shutil, errno
def copyanything(src, dst):
try:
shutil.copytree(src, dst)
except OSError as exc: # python >2.5
if exc.errno == errno.ENOTDIR:
shutil.copy(src, dst)
else: raise
我认为这将是一个更清洁和检查是否是一个目录使用钢骨混凝土(SRC)而os.path.isdir捕捉到异常样本。或有一些特殊原因,应该使用异常而不是在这里吗?
1)E(AFP(在Python的世界,因为它更容易比问宽恕lbyl(许可)是首选的外观到之前,你的飞跃。我可以提供你的联系吗,如果它在你的声音。2)间接制约图书馆功能已经为那个位置,那么为什么replicate检查?3)不停的shutil.copytree函数从两个案例中,改善和管理的未来。4)异常处理程序是在Python中不方便;例如在A stopiteration迭代停止由异常改变。
好的,这需要处理例外案例6线,该线把while型4。不多,但它在加上结束。所以,你可能会说,有一天我会很好的支持文件copytree为好。但它是不可能告诉这将是什么样的实现。也许在一些环境下抛出异常复制的作品在哪里?我会在这案例代码只是因为突然停止工作的增值功能。但你这可能是正确的,异常处理程序是在Python的义例--漂亮的东西,我觉得这非常恼人的,但它可能是因为我从来没有得到它的人
因为你提到它,例外检查代码可以写在上面的4线(就像你或文件检查代码可以写在2)。在任何异常的病例,是部分的"标准"(在Python和原谅我,如果我要为你可能有通孔patronizing)被用于他们的Python(或滴!:)。
有一个明确的工作目标是异常的优势:本案例是完全可能的(虽然不太可能,1)型变化之间的检查和调用正确的函数。
我不说这是不是从一shutil.copytree原子操作,所以它可能是安静类型的变化而copytree挤兑。
这只是在我的实现细节/错误。在未来的版本(可能是固定在一路不中断的代码,所以我给了以上的论点,不适用于在本案例)
在我个人的意见,除了增加的核心功能是在洗澡的做法,不物,你使用的是语言。它使功能到一个地方,在很多开发商不会搜索。继续,如果你不写评论,但经验丰富的Python开发者A也不真的明白这是什么"的目的。如果你需要添加一个搜索琐碎的事我一样在这里,什么是错在你的编码风格。最后,在if / else result想写作更容易阅读的代码中使用。
在我的Windows机器和8.1 Python 2.7,试图在一个不同的文件copytree错误:errno.EINVALRAISE。所以这不是对E(AFP的方法的鲁棒性的变化看似琐碎的错误数。
要添加Tzot和GNS答案,这里有一种递归复制文件和文件夹的替代方法。(Python 3。x)
import os, shutil
root_src_dir = r'C:\MyMusic' #Path/Location of the source directory
root_dst_dir = 'D:MusicBackUp' #Path to the destination folder
for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
os.remove(dst_file)
shutil.copy(src_file, dst_dir)
如果这是你第一次,你不知道如何递归地复制文件和文件夹,我希望这有帮助。
shutil.copy和shutil.copy2正在复制文件。
shutil.copytree复制一个包含所有文件和所有子文件夹的文件夹。shutil.copytree使用shutil.copy2复制文件。
所以你说的与cp -r类似的是shutil.copytree,因为cp -r针对并复制一个文件夹及其文件/子文件夹,如shutil.copytree。没有-rcp拷贝文件,如shutil.copy和shutil.copy2做。
我不认为你的理解问题。shutil.copytree('C:\myfile.txt', 'C:\otherfile')尝试。它不工作。这是关于"手术问什么……7年前。
当然,它不工作。样的CP不与文件夹。你需要一个特殊的选择。复制和copytree是最好的方式来处理复制。如果目标文件copytree可以和它会很容易让错误。你必须知道你的目标是与Linux和Python。这是硬的。该加别人看到它在这里,但这个问题和答案不能回复到抗蚀剂。在优雅的方式是知道你想做的人,没有任何通用的复制和控制。
unix cp不支持目录和文件:
betelgeuse:tmp james$ cp source/ dest/
cp: source/ is a directory (not copied).
要让cp复制一个目录,您必须使用"-r"标志手动告诉cp它是一个目录。
这里有一些断开连接,但是当传递一个文件名时-cp -r,因为源文件很乐意只复制单个文件;copytree不会。
docs.python.org /图书馆/ shutil.html包括位置码(处理)这copytree demonstrates普通文件,目录的符号链接,和。
这个问题不好回答的地址。它应该是a comment,需要的答案。
我想你要找的是复制树
python shutil.copytree方法一团糟。我做了一个正确的工作:
def copydirectorykut(src, dst):
os.chdir(dst)
list=os.listdir(src)
nom= src+'.txt'
fitx= open(nom, 'w')
for item in list:
fitx.write("%s
" % item)
fitx.close()
f = open(nom,'r')
for line in f.readlines():
if"." in line:
shutil.copy(src+'/'+line[:-1],dst+'/'+line[:-1])
else:
if not os.path.exists(dst+'/'+line[:-1]):
os.makedirs(dst+'/'+line[:-1])
copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
f.close()
os.remove(nom)
os.chdir('..')
本代码是一个很好的工作的个人文件检查(检查overwriting Issue),但不工作的二进制文件搜索的"拉链"。为什么需要使用简单的Python文件复制而不是线由线的读/写吗?
python递归实现文件复制_在python中递归复制文件或目录相关推荐
- python 浏览器显示本地文件夹_从浏览器中打开本地文件文件夹
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- android shell强制删除文件夹_原来手机中的这些文件可以删除,难怪手机越用越卡!...
很多从 iOS 转移到 Android 生态的用户,总是会有这样的抱怨:Android 系统越用越卡,就算清理垃圾也没用! 但其实在Android系统中,除了日常的清理垃圾,我们还可以将一些没用的文件 ...
- java中bin和src文件夹_编译src中的所有文件?
这是我得到的: /myjava/compile.cmd /myjava/src/a/HelloWorld.java /myjava/src/b/Inner.java /myjava/src/b/Inn ...
- bak文件转oracle文件,如何在Oracle 11g中恢复.bak文件(How to restore .bak file in oracle 11g)...
如何在Oracle 11g中恢复.bak文件(How to restore .bak file in oracle 11g) 我有Oracle 11g备份文件(.bak文件)如何在Oracle 11g ...
- python交互式和文件式_使用Python创建和自动化交互式仪表盘
python交互式和文件式 In this tutorial, I will be creating an automated, interactive dashboard of Texas COVI ...
- python打开excel进行编辑_使用Python进行Excel文件处理
本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...
- linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统
这段时间在学习python,接触到了网络编程中的socket这块,加上自己在用的Linux服务器都是原生支持python的,于是乎有了个做文件传输功能程序的想法. 毕竟python语言中,有下载功能的 ...
- python文件编译_编译Python文件
编译Python文件 一.编译Python文件 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式 ...
- python函数方法里面用浅复制深复制_图解 Python 浅拷贝与深拷贝
Python 中的赋值语句不会创建对象的拷贝,仅仅只是将名称绑定至一个对象.对于不可变对象,通常没什么差别,但是处理可变对象或可变对象的集合时,你可能需要创建这些对象的 "真实拷贝" ...
最新文章
- Sql Server系列:Transact-SQL概述
- MathType公式行距设置的方法
- CodeForces 362C
- Spring Framework(框架)整体架构
- 精准评论是如何在娱乐类产品中大放异彩?
- K8s 应用管理之道 - 有状态服务
- 新版本xx Chrome等主流浏览器将不再允许关闭点击跟踪
- 慎用 TOraQuery RecordCount
- 【华为云技术分享】华为云文档数据库服务DDS监控告警全新优化
- X2Paddle实践之——Tensorflow版本VGG模型转化为paddle版本模型
- uniapp 评论列表,展开,收起,全部,局部刷新功能
- 控制反转思想的理解实例
- 2018年的人工智能和深度学习将会如何发展?
- 绘制太极图(CSS)
- Android 对一个View进行缩放处理(放大或缩小View)案例
- 显示seata连接不上127.0.0.1:2181
- 大牛谈如何搞定机器视觉
- 什么是JSP引擎?什么是JSP容器?什么是Web服务器?
- SAR成像(零):【总结】SAR成像原理和仿真实现
- python实现简单计算器加减乘除功能_Python3实现简单加减乘除运算的计算器
热门文章
- java 后台区分访问端是微信,qq,qq浏览器
- 让三百六十行人才荟萃、繁星璀璨!中创向心力带你读懂职业教育
- 关于table中一个隐藏的tr,改为显示后与其他tr样式不一样的问题
- 捷径体系:让员工自发地循环工作的管理体系
- 中国现代农业产业园区发展动态及未来战略规划分析报告2022年版
- JavaFX基础教程:001 简介
- php访问微博页面,PHP调用微博接口实现微博登录的方法示例
- python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码
- 2016全国计算机网络统考,2016年全国计算机等级考试试题
- git在一台电脑上配置不同的仓库(多个gitee仓库、或者不同的github仓库)