从包含名为bar(包含一个或多个文件)的目录和名为baz(还包含一个或多个文件)的目录的目录中运行以下代码.确保没有名为的目录foo.
import shutil
shutil.copytree('bar', 'foo')
shutil.copytree('baz', 'foo')
Run Code Online (Sandbox Code Playgroud)
它将失败:
$ python copytree_test.py
Traceback (most recent call last):
File "copytree_test.py", line 5, in <module>
shutil.copytree('baz', 'foo')
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/shutil.py", line 110, in copytree
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.py", line 172, in makedirs
OSError: [Errno 17] File exists: 'foo'
Run Code Online (Sandbox Code Playgroud)
我希望它的工作方式与我输入的方式相同:
$ mkdir foo
$ cp bar/* foo/
$ cp baz/* foo/
Run Code Online (Sandbox Code Playgroud)
我是否需要使用shutil.copy()将每个文件复制baz到foo?(之后我已经将'bar'的内容复制到'foo'中shutil.copytree()?)或者是否有更简单/更好的方法?
我有一个目录/ a/b/c,它有文件和子目录.我需要复制/ x/y/z目录中的/ a/b/c/*.我可以使用哪些python方法?
我试过shutil.copytree("a/b/c", "/x/y/z"),但python尝试创建/ x/y/z并引发一个error "Directory exists".
在Python中,当shutil.rmtree在包含只读文件的文件夹上运行时,将打印以下异常:
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 221, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python26\lib\shutil.py", line 219, in …Run Code Online (Sandbox Code Playgroud) 我正在学习python(python 3),我可以通过执行此操作将1个文件复制到新目录
import shutil
shutil.copyfile('C:/test/test.txt', 'C:/lol/test.txt')
Run Code Online (Sandbox Code Playgroud)
我现在要做的是将所有*.txt文件从C:/复制到C:/ test
*.txt是一个通配符,用于搜索硬盘上的所有文本文件
我已经阅读了这个函数的文档,但是,我不认为我理解它.如果有人能告诉我我错过了什么,或者我是否正确,那将是一个很大的帮助.这是我的理解:
使用该shutil.rmtree(path)函数,它将只删除指定的目录,而不是整个路径.IE:
shutil.rmtree('user/tester/noob')
使用这个,它只会删除'noob'目录正确吗?不是完整的路径?
以下是将移动和替换单个文件的代码
import shutil
import os
src = 'scrFolder'
dst = './dstFolder/'
filelist = []
files = os.listdir( src )
for filename in files:
filelist.append(filename)
fullpath = src + '/' + filename
shutil.move(fullpath, dst)
Run Code Online (Sandbox Code Playgroud)
如果我执行相同的命令并移动已经存在的文件dst folder我正在获取shutil.Error: Destination path './dstFolder/file.txt' already exists如何移动并替换相同的文件名已经存在
我正在尝试将名为test_dicomszip文件的目录压缩为test_dicoms.zip使用以下代码命名的zip文件:
shutil.make_archive('/home/code/test_dicoms','zip','/home/code/test_dicoms')
问题是,当我解压缩它时,所有文件都/test_dicoms/被提取到/home/code/而不是文件夹,/test_dicoms/并且所有文件都被提取到/home/code/.所以/test_dicoms/有一个文件调用foo.txt,在我压缩和解压缩foo.txt的路径之后是/home/code/foo.txt相反的/home/code/test_dicoms/foo.txt.我该如何解决?此外,我正在使用的一些目录非常大.我是否需要在代码中添加任何内容以使其成为ZIP64,或者是否足够自动地执行此操作?
以下是创建的存档中的内容:
[gwarner@jazz gwarner]$ unzip -l test_dicoms.zip
Archive: test_dicoms.zip
Length Date Time Name
--------- ---------- ----- ----
93324 09-17-2015 16:05 AAscout_b_000070
93332 09-17-2015 16:05 AAscout_b_000125
93332 09-17-2015 16:05 AAscout_b_000248
Run Code Online (Sandbox Code Playgroud) 我想shutil.rmtree在Python中使用删除目录.有问题的目录包含一个.git控制目录,git标记为只读和隐藏.
只读标志导致rmtree失败.在Powershell中,我会"强制"强制删除只读标志.Python中有相应的东西吗?我真的不想两次走完整棵树,但onerrorrmtree 的论据似乎没有重试这个操作,所以我不能用
def set_rw(operation, name, exc):
os.chmod(name, stat.S_IWRITE)
shutil.rmtree('path', onerror=set_rw)
Run Code Online (Sandbox Code Playgroud) 我知道这个模块的用途,我只是不知道为什么他们选择这个名字 - shutil.如果我不知道它来自何处,很难记住这种"随机"名称.请给我一些提示,谢谢.
通常在Windows 7控制台中,如果我快速运行两次python程序就可以了
if os.path.isdir(d):
shutil.rmtree(d)
if not os.path.exists(d):
os.mkdir(d)
Run Code Online (Sandbox Code Playgroud)
哪里d是包含许多文件的目录的名称,我得到mkdir命令的"权限被拒绝" .但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误.这里有什么问题?