如何在Python中复制文件?
当前回答
在Python中,可以使用
梭式组件操作系统模块子流程模块
import os
import shutil
import subprocess
1) 使用shutil模块复制文件
shutil.copyfile签名
shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)
# example
shutil.copyfile('source.txt', 'destination.txt')
shutil.copy签名
shutil.copy(src_file, dest_file, *, follow_symlinks=True)
# example
shutil.copy('source.txt', 'destination.txt')
shutil.copy2签名
shutil.copy2(src_file, dest_file, *, follow_symlinks=True)
# example
shutil.copy2('source.txt', 'destination.txt')
shutil.copyfileobj签名
shutil.copyfileobj(src_file_object, dest_file_object[, length])
# example
file_src = 'source.txt'
f_src = open(file_src, 'rb')
file_dest = 'destination.txt'
f_dest = open(file_dest, 'wb')
shutil.copyfileobj(f_src, f_dest)
2) 使用os模块复制文件
os.popen签名
os.popen(cmd[, mode[, bufsize]])
# example
# In Unix/Linux
os.popen('cp source.txt destination.txt')
# In Windows
os.popen('copy source.txt destination.txt')
os.system签名
os.system(command)
# In Linux/Unix
os.system('cp source.txt destination.txt')
# In Windows
os.system('copy source.txt destination.txt')
3) 使用子流程模块复制文件
subprocess.call签名
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.call('cp source.txt destination.txt', shell=True)
# In Windows
status = subprocess.call('copy source.txt destination.txt', shell=True)
subprocess.check_output签名
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.check_output('cp source.txt destination.txt', shell=True)
# In Windows
status = subprocess.check_output('copy source.txt destination.txt', shell=True)
其他回答
shutil模块提供了一些对文件的高级操作。它支持文件复制和删除。
请参考下表了解您的用例。
Function | Utilize File Object |
Preserve File Metadata |
Preserve Permissions |
Supports Directory Dest. |
---|---|---|---|---|
shutil.copyfileobj | ✔ | ⅹ | ⅹ | ⅹ |
shutil.copyfile | ⅹ | ⅹ | ⅹ | ⅹ |
shutil.copy2 | ⅹ | ✔ | ✔ | ✔ |
shutil.copy | ⅹ | ⅹ | ✔ | ✔ |
复制文件是一个相对简单的操作,如下面的示例所示,但是您应该使用shutilstdlib模块。
def copyfileobj_example(source, dest, buffer_size=1024*1024):
"""
Copy a file from source to dest. source and dest
must be file-like objects, i.e. any object with a read or
write method, like for example StringIO.
"""
while True:
copy_buffer = source.read(buffer_size)
if not copy_buffer:
break
dest.write(copy_buffer)
如果要按文件名复制,可以执行以下操作:
def copyfile_example(source, dest):
# Beware, this example does not handle any edge cases!
with open(source, 'rb') as src, open(dest, 'wb') as dst:
copyfileobj_example(src, dst)
您可以使用os.link创建文件的硬链接:
os.link(source, dest)
这不是一个独立的克隆,但是如果您计划只读取(而不是修改)新文件,并且其内容必须保持与原始文件相同,那么这将很好地工作。它还有一个好处,如果你想检查副本是否已经存在,你可以比较硬链接(与os.stat)而不是它们的内容。
在Linux中,命令cp带有键
cp -al
创建硬链接。因此,硬链接可被视为副本。有时,一个人需要完全这种行为(从不同的地方访问文件内容),而不需要单独的副本。
shutil.copy(src,dst,*,follow_symlinks=真)
有两种在Python中复制文件的最佳方法。
1.我们可以使用梭动模块
代码示例:
import shutil
shutil.copyfile('/path/to/file', '/path/to/new/file')
除了copyfile,还有其他可用的方法,如copy、copy2等,但copyfile在性能方面是最好的,
2.我们可以使用OS模块
代码示例:
import os
os.system('cp /path/to/file /path/to/new/file')
另一种方法是使用子流程,但它不是优选的,因为它是调用方法之一,不安全。
推荐文章
- 使用beautifulsoup提取属性值
- 如何禁用标准错误流的日志记录?
- 用Matplotlib在Python中绘制时间
- 类中的Python装饰器
- 在Python中锁定文件
- 得到熊猫栏目的总数
- 从pandas DataFrame中删除名称包含特定字符串的列
- Mock vs MagicMock
- 如何阅读一个。xlsx文件使用熊猫库在iPython?
- 如何访问熊猫组由数据帧按键
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- __FILE__宏显示完整路径
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代