python复制库函数 Python中复制

如何使用python复制大概200G的数据[任何语言只要能实现]

如果我理解的正确的话,楼主是要copy大文件吧。

创新互联是专业的小店网站建设公司,小店接单;提供网站制作、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行小店网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

python最经常使用的copy函数,应该是shutil.copyfile()了,它默认以16384bytes 的大小作为缓冲区,对于小的文件,的确不错。但是处理到大的文件的时候,性能下降就很严重。过小的buffer会不合适。

经过多次的尝试,发现10Mb的buffer最合适,再高也没有性能的提升。重载后的copy函数如下

def copyFile(src, dst, buffer_size=10485760, perserveFileDate=True):

'''

Copies a file to a new location. Much faster performance than Apache Commons due to use of larger buffer

@param src:    Source File

@param dst:    Destination File (not file path)

@param buffer_size:    Buffer size to use during copy

@param perserveFileDate:    Preserve the original file date

'''

#    Check to make sure destination directory exists. If it doesn't create the directory

dstParent, dstFileName = os.path.split(dst)

if(not(os.path.exists(dstParent))):

os.makedirs(dstParent)

#    Optimize the buffer for small files

buffer_size = min(buffer_size,os.path.getsize(src))

if(buffer_size == 0):

buffer_size = 1024

if shutil._samefile(src, dst):

raise shutil.Error("`%s` and `%s` are the same file" % (src, dst))

for fn in [src, dst]:

try:

st = os.stat(fn)

except OSError:

# File most likely does not exist

pass

else:

# XXX What about other special files? (sockets, devices...)

if shutil.stat.S_ISFIFO(st.st_mode):

raise shutil.SpecialFileError("`%s` is a named pipe" % fn)

with open(src, 'rb') as fsrc:

with open(dst, 'wb') as fdst:

shutil.copyfileobj(fsrc, fdst, buffer_size)

if(perserveFileDate):

shutil.copystat(src, dst)

使用的时候记得添加相应的包。

python 函数里面 字典复制问题

如果是我,我会在函数里面声明b是global的,而不是用似是而非的传值传指针,你这样写是想说b_hash传递的是指针,可惜python里一旦用“=”赋值就已经相当于声明了一个新的变量,所以你的这个问题两种解决办法:

第一个,把你要传指针的东西放到列表里:

def test(aa,bb):

bb[0]=copy.deepcopy(aa)

a={1:1}

b=[{}]

test(a,b)

print b[0]

这样保证你可以通过b这个名字找到改变后的指针。

第二个,在函数里声明你要修改的是全局变量:

def test(aa):

global b

b=copy.deepcopy(aa)

a={1:1}

b={}

test(a)

print b

当然,你还可以用既不是global也不是local的局部作用域,那可以说叫闭包,但有些不好懂就不说了。。。

楼上的方法思想和第一种一样,但是没做深层拷贝,一层for循环没有递归实现了copy.copy,而不是copy.deepcopy。。。

python列表怎么复制

提问者这么短的描述,有点无法看懂,那就按照通常的几种方法来说吧:

简单列表的拷贝

已知一个列表,求生成一个新的列表,列表元素是原列表的复制

a=[1,2]

b=a

这种其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。

后果:如果对a或b的元素进行修改,a,b的值同时发生变化。

可以使用以下方法解决:

a=[1,2]

b=a[:]

这样修改a对b没有影响。修改b对a没有影响。

复杂列表的拷贝:

可以使用copy模块中的deepcopy函数。修改测试如下:

import copy

a=[1,[2]]

b=copy.deepcopy(a)


文章名称:python复制库函数 Python中复制
路径分享:http://azwzsj.com/article/hhhchj.html