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中递归复制文件或目录相关推荐

  1. python 浏览器显示本地文件夹_从浏览器中打开本地文件文件夹

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. android shell强制删除文件夹_原来手机中的这些文件可以删除,难怪手机越用越卡!...

    很多从 iOS 转移到 Android 生态的用户,总是会有这样的抱怨:Android 系统越用越卡,就算清理垃圾也没用! 但其实在Android系统中,除了日常的清理垃圾,我们还可以将一些没用的文件 ...

  3. java中bin和src文件夹_编译src中的所有文件?

    这是我得到的: /myjava/compile.cmd /myjava/src/a/HelloWorld.java /myjava/src/b/Inner.java /myjava/src/b/Inn ...

  4. 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 ...

  5. python交互式和文件式_使用Python创建和自动化交互式仪表盘

    python交互式和文件式 In this tutorial, I will be creating an automated, interactive dashboard of Texas COVI ...

  6. python打开excel进行编辑_使用Python进行Excel文件处理

    本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...

  7. linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

    这段时间在学习python,接触到了网络编程中的socket这块,加上自己在用的Linux服务器都是原生支持python的,于是乎有了个做文件传输功能程序的想法. 毕竟python语言中,有下载功能的 ...

  8. python文件编译_编译Python文件

    编译Python文件 一.编译Python文件 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式 ...

  9. python函数方法里面用浅复制深复制_图解 Python 浅拷贝与深拷贝

    Python 中的赋值语句不会创建对象的拷贝,仅仅只是将名称绑定至一个对象.对于不可变对象,通常没什么差别,但是处理可变对象或可变对象的集合时,你可能需要创建这些对象的 "真实拷贝" ...

最新文章

  1. Sql Server系列:Transact-SQL概述
  2. MathType公式行距设置的方法
  3. CodeForces 362C
  4. Spring Framework(框架)整体架构
  5. 精准评论是如何在娱乐类产品中大放异彩?
  6. K8s 应用管理之道 - 有状态服务
  7. 新版本xx Chrome等主流浏览器将不再允许关闭点击跟踪
  8. 慎用 TOraQuery RecordCount
  9. 【华为云技术分享】华为云文档数据库服务DDS监控告警全新优化
  10. X2Paddle实践之——Tensorflow版本VGG模型转化为paddle版本模型
  11. uniapp 评论列表,展开,收起,全部,局部刷新功能
  12. 控制反转思想的理解实例
  13. 2018年的人工智能和深度学习将会如何发展?
  14. 绘制太极图(CSS)
  15. Android 对一个View进行缩放处理(放大或缩小View)案例
  16. 显示seata连接不上127.0.0.1:2181
  17. 大牛谈如何搞定机器视觉
  18. 什么是JSP引擎?什么是JSP容器?什么是Web服务器?
  19. SAR成像(零):【总结】SAR成像原理和仿真实现
  20. python实现简单计算器加减乘除功能_Python3实现简单加减乘除运算的计算器

热门文章

  1. java 后台区分访问端是微信,qq,qq浏览器
  2. 让三百六十行人才荟萃、繁星璀璨!中创向心力带你读懂职业教育
  3. 关于table中一个隐藏的tr,改为显示后与其他tr样式不一样的问题
  4. 捷径体系:让员工自发地循环工作的管理体系
  5. 中国现代农业产业园区发展动态及未来战略规划分析报告2022年版
  6. JavaFX基础教程:001 简介
  7. php访问微博页面,PHP调用微博接口实现微博登录的方法示例
  8. python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码
  9. 2016全国计算机网络统考,2016年全国计算机等级考试试题
  10. git在一台电脑上配置不同的仓库(多个gitee仓库、或者不同的github仓库)