欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python拷貝函數(shù),python拷貝文件函數(shù)

Python的shutil模塊中文件的復(fù)制操作

shutil.copyfile(src, dst):將名為src的文件的內(nèi)容復(fù)制到名為dst的文件中 。

創(chuàng)新互聯(lián)專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價(jià)格,機(jī)房位于中國(guó)電信/網(wǎng)通/移動(dòng)機(jī)房,成都多線機(jī)房服務(wù)有保障!

src, dst是文件名

shutil.copy(source, destination)

shutil.copy() 函數(shù)實(shí)現(xiàn)文件復(fù)制功能,將 source 文件復(fù)制到 destination 文件夾中,兩個(gè)參數(shù)都是字符串格式。如果 destination 是一個(gè)文件名稱,那么它會(huì)被用來(lái)當(dāng)作復(fù)制后的文件名稱,即等于 復(fù)制 + 重命名。

source一定是文件名,destination可以是文件名也可以是文件夾名

舉例如下:

shutil 模塊

Python對(duì)象的拷貝

Python賦值操作或函數(shù)參數(shù)傳遞,傳遞的永遠(yuǎn)是對(duì)象引用(即內(nèi)存地址),而不是對(duì)象內(nèi)容。在Python中一切皆對(duì)象,對(duì)象又分為可變(mutable)和不可變(immutable)兩種類型。對(duì)象拷貝是指在內(nèi)存中創(chuàng)建新的對(duì)象,產(chǎn)生新的內(nèi)存地址。當(dāng)頂層對(duì)象和它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),不存在被拷貝,因?yàn)闆](méi)有產(chǎn)生新對(duì)象。淺拷貝(Shallow Copy),拷貝頂層對(duì)象,但不會(huì)拷貝內(nèi)部的子元素對(duì)象。深拷貝(Deep Copy),遞歸拷貝頂層對(duì)象,以及它內(nèi)部的子元素對(duì)象。

Python中一切皆對(duì)象,對(duì)象就像一個(gè)塑料盒子, 里面裝的是數(shù)據(jù)。對(duì)象有不同類型,例如布爾型和整型,類型決定了可以對(duì)它進(jìn)行的操作。現(xiàn)實(shí)生活中的"陶器"會(huì)暗含一些信息(例如它可能很重且易碎,注意不要掉到地上)。

對(duì)象的類型還決定了它裝著的數(shù)據(jù)是允許被修改的變量(可變的mutable)還是不可被修改的常量(不可變的immutable)。你可以把不可變對(duì)象想象成一個(gè)透明但封閉的盒子:你可以看到里面裝的數(shù)據(jù),但是無(wú)法改變它。類似地,可變對(duì)象就像一個(gè)開(kāi)著口的盒子,你不僅可以看到里面的數(shù)據(jù),還可以拿出來(lái)修改它,但你無(wú)法改變這個(gè)盒子本身,即你無(wú)法改變對(duì)象的類型。

對(duì)象拷貝是指在內(nèi)存中創(chuàng)建新的對(duì)象,產(chǎn)生新的內(nèi)存地址。

淺拷貝(Shallow Copy),拷貝頂層對(duì)象,但不會(huì)拷貝內(nèi)部的子元素對(duì)象。

2.1.1. 頂層是mutable,子元素全是immutable

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但是它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),如[1, 'world', 2]

① 創(chuàng)建列表對(duì)象并賦值給變量a

② 導(dǎo)入copy模塊,使用copy.copy()函數(shù)淺拷貝a,并賦值給變量b

③ 修改變量a的子元素a[0] = 3,由于整數(shù)是不可變對(duì)象,所以并不是修改1變?yōu)?,而是更改a[0]指向?qū)ο?

當(dāng)頂層對(duì)象是 mutable可變對(duì)象 ,但子元素也存在 mutable可變對(duì)象 時(shí),如 [1, 2, ['hello','world']]

① 淺拷貝 copy.copy() 只拷貝了頂層對(duì)象,沒(méi)有拷貝子元素對(duì)象['hello','world'],即a[2]和b[2]指向同一個(gè)列表對(duì)象

② 修改a[2][1] = 'china',則b[2][1] = 'china'

當(dāng)頂層對(duì)象是immutable不可變對(duì)象,同時(shí)它的子元素對(duì)象也全都是immutable不可變對(duì)象時(shí),如(1, 2, 3)

變量a與變量b指向的是同一個(gè)元組對(duì)象,沒(méi)有拷貝

當(dāng)頂層對(duì)象是immutable不可變對(duì)象時(shí),但子元素存在mutable可變對(duì)象時(shí),如(1, 2, ['hello','world'])

變量a與變量b指向的是相同的元組對(duì)象,并且a[2]與b[2]指向同一個(gè)列表,所以修改a[2][1]會(huì)影響b[2][1]

深拷貝(Deep Copy),遞歸拷貝頂層對(duì)象,以及它內(nèi)部的子元素對(duì)象

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但是它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),如[1, 'world', 2]

變量a與變量b指向不同的列表對(duì)象,修改a[0]只是將列表a的第一個(gè)元素重新指向新對(duì)象,不會(huì)影響b[0]

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但子元素也存在mutable可變對(duì)象時(shí),如[1, 2, ['hello','world']]

深拷貝既拷貝了頂層對(duì)象,又遞歸拷貝了子元素對(duì)象,所以a[2]與b[2]指向了兩個(gè)不同的列表對(duì)象(但是列表對(duì)象的子元素初始指定的字符串對(duì)象一樣),修改a[2][1] = 'china'后,它重新指向了新的字符串對(duì)象(內(nèi)存地址為140531581905808),不會(huì)影響到b[2][1]

當(dāng)頂層對(duì)象是immutable不可變對(duì)象,同時(shí)它的子元素對(duì)象也全都是immutable不可變對(duì)象時(shí),如(1, 2, 3)

變量a與變量b指向的是同一個(gè)元組對(duì)象,不存在拷貝

當(dāng)頂層對(duì)象是immutable不可變對(duì)象時(shí),但子元素存在mutable可變對(duì)象時(shí),如(1, 2, ['hello','world'])

變量a與變量b指向的是不同的元組對(duì)象,同時(shí)a[2]與b[2]指向不同的列表對(duì)象,所以修改a[2][1]不會(huì)影響b[2][1]

使用=是賦值,即將列表對(duì)象的引用也賦值給變量b,可以將列表對(duì)象想像成一個(gè)盒子,變量a相當(dāng)于這個(gè)盒子上的標(biāo)簽,執(zhí)行b = a后,相當(dāng)于再在這個(gè)盒子上貼上b標(biāo)簽,a和b實(shí)際上指向的是同一個(gè)對(duì)象。因此,無(wú)論我們是通過(guò)a還是通過(guò)b來(lái)修改列表的內(nèi)容,其結(jié)果都會(huì)作用于雙方。

b/c/d都是a的復(fù)制,它們都指向了不同的列表對(duì)象,但是沒(méi)有拷貝子元素,a[2]和b[2]/c[2]/d[2]指向同一個(gè)列表, 相當(dāng)于淺拷貝的效果

使用分片[:]操作,a和b其實(shí)是指向同一個(gè)元組,而且沒(méi)有拷貝子元素,a[2]和b[2]也指向同一個(gè)列表,相當(dāng)于淺拷貝的效果

同列表類似,可以使用字典的copy()函數(shù)或者轉(zhuǎn)換函數(shù)dict()

變量a與變量b/c指向不同的字典,但是沒(méi)有拷貝子元素,a['jobs']和b['jobs']/c['jobs']指定同一個(gè)列表, 相當(dāng)于淺拷貝的效果

同列表類似,可以使用集合的copy()函數(shù)或者轉(zhuǎn)換函數(shù)set()

變量a與變量b/c指向不同的集合,而集合的元素必須是hashable,所以修改集合a不會(huì)影響到b/c

Python的賦值與復(fù)制

對(duì)于Python的初學(xué)者,在對(duì)象的使用過(guò)程中,由于對(duì)變量的賦值和對(duì)象的復(fù)制中的概念模糊,導(dǎo)致程序出錯(cuò)。

例如,下面的代碼:

輸出結(jié)果為:

a = [6,2,3,4,5],

b = [6,2,3,4,5],

c = [1,2,3,4,5]

a等于b?True

a等于c?True

a是b?True

a是c? False

可以看到,a,b, c所指向的對(duì)象的值都相同(a==b為True). a和b都是代表同一個(gè)對(duì)象(a is b為True)。當(dāng)我們通過(guò)變量b對(duì)該列表進(jìn)行修改時(shí),由于a也指向該列表,所以當(dāng)打印a,b時(shí),我們得到相同的值。 而a和c則是代表不同的對(duì)象(a is c為False),所以修改b所指向得列表不會(huì)改變c梭子鄉(xiāng)的列表的值.

在Python中,所有的變量都代表了對(duì)象,即便是簡(jiǎn)單的數(shù)字類型(int, float, bool),也是以對(duì)象的形式存在的。我們看下面的代碼:

輸出結(jié)果是:

a==b為True

a is b為True

可見(jiàn),a, b都是指向同一個(gè)對(duì)象。接下來(lái),進(jìn)行下面的操作,

輸出結(jié)果是:

a = 1, b = 2

a is b為False

與前面的列表不同,當(dāng)我們對(duì)b做修改時(shí),實(shí)際上是給b賦予了一個(gè)新生成的對(duì)象,對(duì)數(shù)值類型來(lái)說(shuō),所有的數(shù)值運(yùn)算都會(huì)創(chuàng)建一個(gè)數(shù)值對(duì)象,并將這個(gè)對(duì)象指定給變量。因此,a與b指向了不同的對(duì)象,數(shù)值也不同。

再回過(guò)頭來(lái)看列表對(duì)象,

我們知道,b是與a指向同一對(duì)象的變量,使用b對(duì)該對(duì)象進(jìn)行修改,與使用a對(duì)該對(duì)象進(jìn)行修改,效果是完全一樣的。如果我們需要需要一個(gè)與a完全相同又與a相互獨(dú)立的列表,那么就需要復(fù)制這個(gè)對(duì)象,也就是新建一個(gè)內(nèi)容和源對(duì)象相同的對(duì)象。

對(duì)于列表來(lái)說(shuō),最簡(jiǎn)單的復(fù)制方法是通過(guò)下標(biāo)索引的方式創(chuàng)建新的列表:

對(duì)于各種數(shù)據(jù)類型通用的對(duì)象拷貝復(fù)制,我們可以使用python內(nèi)建的copy模塊。

對(duì)于復(fù)雜對(duì)象(如嵌套列表)的復(fù)制,則需要注意區(qū)分淺拷貝和深拷貝。我們來(lái)看下面的代碼:

得到的結(jié)果是:

a[0] is b[0]為 True

a[0] is c[0]為 False

a = [[-1, 2, 3], [4, 5, 6]]

b = [[-1, 2, 3], [7, 8, 9]]

c = [[1, 2, 3], [4, 5, 6]]

a[1] is b[1]為False

從上面的代碼我們可以看到,copy函數(shù)為淺拷貝,只拷貝了對(duì)象的外層,而對(duì)象內(nèi)部所包含的對(duì)象仍然指向原有的對(duì)象。而deepcopy則為深拷貝,對(duì)象內(nèi)部的對(duì)象也進(jìn)行了復(fù)制。

以上我們對(duì)變量的賦值和對(duì)象的復(fù)制做了更加深入的分析。在具體的使用中,我們需要根據(jù)具體來(lái)決定使用賦值、淺拷貝、深拷貝。

說(shuō)說(shuō)在 Python 中如何復(fù)制、移動(dòng)、改名以及刪除文件或文件夾

要實(shí)現(xiàn)復(fù)制、移動(dòng)、改名以及刪除文件或文件夾,需要用到 shutil 模塊,shutil 是 shell util 的簡(jiǎn)寫形式,表示 shell 工具。

調(diào)用 shutil.copy(source, destination) 來(lái)實(shí)現(xiàn)復(fù)制文件或文件夾功能,依據(jù) destination 進(jìn)行區(qū)分:

運(yùn)行結(jié)果:

注意: 指定復(fù)制的文件夾必須存在,否則會(huì)拋出 FileNotFoundError。

shutil 的 copytree(source, destination) 方法會(huì)復(fù)制整個(gè)文件夾,包括它所包含的所有文件夾和文件。source

指定源文件夾,destination 指定新的文件夾。source 和 destination 入?yún)⒍际亲址T摵瘮?shù)會(huì)返回新文件夾的路徑。destination 如果不存在,會(huì)自動(dòng)創(chuàng)建。請(qǐng)看下例:

運(yùn)行結(jié)果:

shutil.move(source, destination) 方法會(huì)將路徑 source 處的文件移動(dòng)到路徑 destination,并返回新位置的絕對(duì)路徑的字符串。

如果 destination 指向一個(gè)文件夾, source 處的文件將移動(dòng)到 destination 中, 并保持原來(lái)的文件名。

運(yùn)行結(jié)果:

注意:

os 模塊中的函數(shù),可以實(shí)現(xiàn)刪除一個(gè)文件或一個(gè)空文件夾。而 shutil 更強(qiáng)大,使用它可以刪除一個(gè)非空文件夾!

注意: 因?yàn)槭怯谰脛h除,所以使用這些函數(shù)一定要小心!建議調(diào)試程序時(shí), 先注釋掉這些刪除方法,

然后加上 print(), 把要被刪除的文件打印出來(lái),確認(rèn)后,再執(zhí)行。

打印出來(lái)的文件列表確認(rèn)無(wú)誤后,再執(zhí)行 os.unlink(filename) 執(zhí)行刪除操作。

send2trash 模塊會(huì)將文件夾或文件發(fā)送到計(jì)算機(jī)的回收站。首先,安裝它:

安裝成功后,調(diào)用 send2trash.send2trash 方法,就可以把文件夾或文件發(fā)送到計(jì)算機(jī)的回收站。請(qǐng)看下例:

建議使用 send2trash.send2trash() 函數(shù)來(lái)刪除文件或文件夾,因?yàn)橐院筮€可以從回收站還原。但這樣做,不

會(huì)釋放磁盤空間。如果我們還是希望程序釋放磁盤空間, 就要用 os 和 shutil 來(lái)刪除文件和

文件夾(記得使用之前提出的 print 技巧)。還有一點(diǎn)需要注意, send2trash() 函數(shù)只能將文件送到回收站, 但不能從回收站中恢復(fù)文件。

python 中如何實(shí)現(xiàn)對(duì)文件的復(fù)制、粘貼

file類中沒(méi)有提供專門的文件復(fù)制函數(shù),因此只能通過(guò)使用文件的讀寫函數(shù)來(lái)實(shí)現(xiàn)文件的復(fù)制。這里僅僅給出范例:

src = file("myfile.txt", "w+")

temp = ["hello world! \n"]

src.writelines(temp)

src.close()

src = file("myfile.txt", "r+")

des = file("myfile2.txt", "w+")

des.writelines(src.read())

src.close()

des.close()

shutil模塊是另一個(gè)文件,目錄的管理接口,提供了一些用于復(fù)制文件,目錄的函數(shù)。copyfile()函數(shù)可以實(shí)現(xiàn)文件的拷貝,聲明如下:

copyfile(src, des)

文件的剪切可以使用move()函數(shù)模擬,聲明如下:

move(src,des)

功能:移動(dòng)一個(gè)文件或者目錄到指定的位置,并且可以根據(jù)參數(shù)des重命名移動(dòng)后的文件。

Python中的賦值,淺拷貝和深拷貝的區(qū)別

賦值(=),就是創(chuàng)建了對(duì)象的一個(gè)新的引用,修改其中任意一個(gè)變量都會(huì)影響到另一個(gè)。

淺拷貝:創(chuàng)建一個(gè)新的對(duì)象,但它包含的是對(duì)原始對(duì)象中包含項(xiàng)的引用(如果用引用的方式修改其中一個(gè)對(duì)象,另外一個(gè)也會(huì)修改改變){1,完全切片方法;2,工廠函數(shù),如list();3,copy模塊的copy()函數(shù)}

深拷貝:創(chuàng)建一個(gè)新的對(duì)象,并且遞歸的復(fù)制它所包含的對(duì)象(修改其中一個(gè),另外一個(gè)不會(huì)改變){copy模塊的deep.deepcopy()函數(shù)}

網(wǎng)站題目:python拷貝函數(shù),python拷貝文件函數(shù)
分享鏈接:http://chinadenli.net/article30/dsgoipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)站營(yíng)銷移動(dòng)網(wǎng)站建設(shè)外貿(mào)建站網(wǎng)站維護(hù)關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化