如何在Python中复制文件?
当前回答
对于小文件和仅使用Python内置程序,可以使用以下一行代码:
with open(source, 'rb') as src, open(dest, 'wb') as dst: dst.write(src.read())
对于文件太大或内存很关键的应用程序来说,这不是最佳方式,因此应该首选Swati的答案。
其他回答
您可以使用os.link创建文件的硬链接:
os.link(source, dest)
这不是一个独立的克隆,但是如果您计划只读取(而不是修改)新文件,并且其内容必须保持与原始文件相同,那么这将很好地工作。它还有一个好处,如果你想检查副本是否已经存在,你可以比较硬链接(与os.stat)而不是它们的内容。
在Linux中,命令cp带有键
cp -al
创建硬链接。因此,硬链接可被视为副本。有时,一个人需要完全这种行为(从不同的地方访问文件内容),而不需要单独的副本。
Python提供了内置函数,可以使用操作系统shell实用程序轻松复制文件。
以下命令用于复制文件:
shutil.copy(src, dst)
以下命令用于复制包含元数据信息的文件:
shutil.copystat(src, dst)
您可以使用os.system('cp nameoflegatedbyprogram/otherdirectory/')。
或者就像我做的那样,
os.system('cp '+ rawfile + ' rawdata.dat')
其中rawfile是我在程序中生成的名称。
这是一个仅限Linux的解决方案。
shutil模块提供了一些对文件的高级操作。它支持文件复制和删除。
请参考下表了解您的用例。
Function | Utilize File Object |
Preserve File Metadata |
Preserve Permissions |
Supports Directory Dest. |
---|---|---|---|---|
shutil.copyfileobj | ✔ | ⅹ | ⅹ | ⅹ |
shutil.copyfile | ⅹ | ⅹ | ⅹ | ⅹ |
shutil.copy2 | ⅹ | ✔ | ✔ | ✔ |
shutil.copy | ⅹ | ⅹ | ✔ | ✔ |
这里有一个简单的方法,不需要任何模块。这与这个答案类似,但如果它是一个不适合RAM的大文件,那么它也可以工作:
with open('sourcefile', 'rb') as f, open('destfile', 'wb') as g:
while True:
block = f.read(16*1024*1024) # work by blocks of 16 MB
if not block: # end of file
break
g.write(block)
因为我们正在编写一个新文件,所以它不会保留修改时间等。如果需要,我们可以使用os.utime。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录