这个问题已经在这里有了答案 :
如何在Python中复制文件?
(17个答案)
5年前关闭。
shutil.copyfile()
使用Windows File Explorer或Mac’s
Finder将文件复制到常规右键单击复制>右键单击粘贴的时间至少要长3倍。有没有比shutil.copyfile()
Python更快的替代方法?可以采取什么措施来加快文件复制过程?(文件目标位于网络驱动器上……如果有任何区别……)。
这是我最终得到的结果:
def copyWithSubprocess(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
win=mac=False
if sys.platform.startswith("darwin"):mac=True
elif sys.platform.startswith("win"):win=True
cmd=None
if mac: cmd=['cp', source, dest]
elif win: cmd=['xcopy', source, dest, '/K/O/X']
if cmd: copyWithSubprocess(cmd)
最快的版本,没有使用以下代码过度优化我的代码:
class CTError(Exception):
def __init__(self, errors):
self.errors = errors
try:
O_BINARY = os.O_BINARY
except:
O_BINARY = 0
READ_FLAGS = os.O_RDONLY | O_BINARY
WRITE_FLAGS = os.O_WRONLY | os.O_CREAT | os.O_TRUNC | O_BINARY
BUFFER_SIZE = 128*1024
def copyfile(src, dst):
try:
fin = os.open(src, READ_FLAGS)
stat = os.fstat(fin)
fout = os.open(dst, WRITE_FLAGS, stat.st_mode)
for x in iter(lambda: os.read(fin, BUFFER_SIZE), ""):
os.write(fout, x)
finally:
try: os.close(fin)
except: pass
try: os.close(fout)
except: pass
def copytree(src, dst, symlinks=False, ignore=[]):
names = os.listdir(src)
if not os.path.exists(dst):
os.makedirs(dst)
errors = []
for name in names:
if name in ignore:
continue
srcname = os.path.join(src, name)
dstname = os.path.html" target="_blank">join(dst, name)
try:
if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)
elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks, ignore)
else:
copyfile(srcname, dstname)
# XXX What about devices, sockets etc.?
except (IOError, os.error), why:
errors.append((srcname, dstname, str(why)))
except CTError, err:
errors.extend(err.errors)
if errors:
raise CTError(errors)
此代码的运行速度比本地linux“ cp -rf”慢。
比较本地存储到tmfps的收益大约是2倍至3倍,而NFS到本地存储则是6倍左右。
分析后,我注意到shutil.copy做了很多非常重要的fstat
syscal。如果要进一步优化,我建议对src做一个fstat并重用这些值。老实说,我没有走更远的一步,因为我得到的数字几乎与本地linux复制工具相同,而优化几百毫秒并不是我的目标。
问题内容: 从某些索引开始,肯定有一些使用Swift拷贝数组末尾的非常优雅的方法,但是我只是找不到它,所以我以此结束: 有没有其他功能的更好方法吗? 问题答案: 还有一个… 这给出了对于大多数目的来说应该足够好的。如果您需要一个真实的,请使用 如果起始索引大于(或等于)元素计数,则会创建一个空数组/切片。
问题内容: 如何在Python中复制文件? 我找不到任何东西。 问题答案: ┌──────────────────┬────────┬───────────┬───────┬────────────────┐ │ Function │ Copies │ Copies │Can use│ Destination │ │ │metadata│permissions│buffer │may be dir
问题内容: 在Swift中,当您传递值类型时,对函数说一个数组。制作了数组的副本以供该函数使用。 但是https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP400
Swift版本3。 我正在着手将我的realm.default文件复制到我的应用程序中,如果它不存在的话,这样我就可以将它打包为发行版的一部分。该文件需要是可变的,所以我将其复制到文档目录。 不幸的是,我得到一个文件不存在的错误。我已经验证了路径是正确的,并且.app中有该文件。 下面是我的应用程序委托加载领域文件的代码: 以下是错误消息(上下文用粗体表示): 出现错误,以下是详细信息:error
问题内容: 我刚刚开始学习来自Android的iOS的Apple Swift编程。我现在基本上可以阅读和操作swift代码,还学习了iOS swift编程中使用的一些通用类,但是仍然对语法和所有内容感到困惑。 我正在尝试下载文件。就像,让我们说来自这个网址 在一个按钮中单击。也许也有视觉进步 通过在stackoverflow中搜索,我偶然发现了Alamofire。我可以尝试一下,但是我不确定这是否
问题内容: 我有一个Python程序,可与字典配合使用。我必须复制字典数千次。我需要密钥和关联内容的副本。该副本将被编辑,并且不得链接到原始副本(例如,副本中的更改不得影响原始副本。) 键是字符串,值是整数(0/1)。 我目前使用一种简单的方法: 对我的代码进行性能分析表明,复制操作花费了大部分时间。 有没有更快的替代方法?什么是最快的? 问题答案: 查看Python操作的C源代码,您会发现它们做