導航:首頁 > 文件目錄 > python拷貝文件內容

python拷貝文件內容

發布時間:2023-03-31 17:37:41

① python的深拷貝和淺拷貝

1.什麼是深拷貝?什麼是淺拷貝?(深拷貝與淺拷貝的區別)
簡單點來說,就是假設B復制了A,當修改A時,看B是否會發生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,
如果B沒變,那就是深拷貝,自食其力。
也可以這么說: 淺拷貝沒有拷貝子對象,所以原始數據改變,子對象會改變;深拷貝,包含對象裡面的子對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變

(1)父對象是可變對象拷貝,只拷貝父對象的的值,不會對其子對象的值進行拷貝而是拷貝的子對象的索引,然後創建一個新的對象(ID地址不一樣),如果子對象是可變對象,依然是可以修改的。
(2)父對象是不可變對象的拷貝,就悶首襲是對另外一個變數的內存地址的拷貝(ID地址一樣)或者螞兄說對象引用。

import
a1=[1,2]
a2=[3,4]
a=[a1,a2]
b=.(a)#淺拷貝
c=.deep(a)#深拷貝
print(id(a)) #140414167869960
print(id(b)) #140414167869896
print(id(c)) #140414167869832
print(id(a[0])) # 140414167868488
print(id(b[0])) #140414167868488
print(id(c[0])) #140414167869768

"""

"""
import
a1=(1,2)
a2=(3,4)
a=(a1,a2)
b=.(a)
c=.deep(a)
print(id(a)) #140648248055496
print(id(b)) #140648248055496
print(id(c)) #140648248055496
print(id(a[0])) #140648248055944
print(id(b[0])) #140648248055944
print(id(c[0])) #140648248055944

""芹段"

② Python對象的拷貝

Python賦值操作或函數參數傳遞,傳遞的永遠是對象引用(即內存地址),而不是對象內容。在Python中一切皆對象,對象又分為可變(mutable)和不可變(immutable)兩種類型。對象拷貝是指在內存中創建新的對象,產生新的內存地址。當頂層對象和它的子元素對象全都是immutable不可變對象時,不存在被拷貝,因為沒有產生新對象。淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。深拷貝(Deep Copy),遞歸拷貝頂層對象,以及它內部的子元素對象。

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

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

對象拷貝是指在內存中創建新的對象,產生新的內存地址。

淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。
2.1.1. 頂層是mutable,子元素全是immutable
當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, 'world', 2]

① 創建列表對象並賦值給變數a

② 導入模塊,使用.()函數淺拷貝a,並賦值給變數b

③ 修改變數a的子元素a[0] = 3,由於整數是耐汪不可變對象,所以並不是修改1變為3,而是更改a[0]指向對象3

當頂層對象是 mutable可變對象 ,但子元素也存在 mutable可變對象 時,如 [1, 2, ['hello','world']]

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

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

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變數a與變數b指向的是同一個元組對象,沒有拷貝

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

變數a與變數b指向的是相同的元組對象,並且a[2]與b[2]指向同一個列表,所以修改a[2][1]會影響b[2][1]

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

當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, 'world', 2]

變數a與變數b指向不同的列表對象,修改a[0]只是將列表a的第一個元素重新指向新對象,不會影響b[0]

當頂層對象是mutable可變對象,但昌尺仔子元素也存在mutable可變對象時,如[1, 2, ['hello','world']]

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

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變數a與變數b指向的是同一個元組對象,不存在拷貝

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

變數a與變數b指向的是不同的元組對象,同時a[2]與b[2]指向不同的列表對象,所以修改a[2][1]不會影響b[2][1]

使用=是賦值,即將列表對象的引用也賦值給變數b,可以將列表對象想像成一個盒子,變數a相當於這個盒子上的標簽,執行b = a後,相當於再在這個盒子上貼上b標簽,a和b實際上指向的是同一個對象。因此,無論我們是通過a還是通過b來修改列表的內容,其結果都會作用於雙方。

b/c/d都是a的復制,它們都指向了不同的列表對象,但是沒有拷貝子元素,a[2]和b[2]/c[2]/d[2]指向同一個列表, 相當於淺拷貝的效果

使用分片[:]操作,a和b其實是指向同一個元組,而且沒有拷貝子元素,a[2]和b[2]也指向同一個列表,相當於淺拷貝的效果

同列表類似,可以使用字典的()函數或者轉換函數dict()

變數a與變數b/c指向不同的字典,但是沒有拷貝子元素,a['jobs']和b['jobs']/c['jobs']指定同一個列表, 相當於淺拷貝的效果

同列表類似,可以使用集合的()函數或者轉換函數set()

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

③ python 復制文件

報錯多半是這句targetDir = targetDir+'/'+os.path.split(sourceDir)[1]

你這句把本來的targetDir覆蓋了,導致後面的文件的目標文件夾被修改


發個我寫的吧,參考下吧

defFile(sourceDir,targetDir):
ifnotos.path.exists(targetDir):
os.makedirs(targetDir)

forfilenameinos.listdir(sourceDir):
path=os.path.join(sourceDir,filename)
ifos.path.isdir(path):
targetSubDir=os.path.join(targetDir,filename)
File(path,targetSubDir)
else:
targetPath=os.path.join(targetDir,filename)
open(targetPath,'wb').write(open(path,'rb').read())

④ Python帶格式拷貝excel表格(從A拷貝到B)

使用openpyxl包  從表A.xlsx 完全拷貝數據到表B.xlsx   openpyxl這個包不支持xls格式的excel文件

如果A.xlsx中的數據有用到公式自動求和的,在讀取A.xlsx中的的數據的時候 需要

load_workbook(A.xlsx,data_only=True)這樣加第二個參數  只讀取數據否則讀出來的就是公式.

下面是重點如果A.xlsx中的表格帶有填充顏色 合並單元格字體格式  等等需要如下這樣做

myfile = A.xlsx

targFile = B.xlsx

wb = load_workbook(myfile,data_only=True)._sheets #原要拷貝單元格

wb2 = load_workbook(targFile) # 目標單元格

 wr = wb[index]

 ws = wb2._sheets[1]

 # 兩個for循環遍歷整個excel的單元格內容

for i, row in enumerate(wr.iter_rows()):

      for j, cell in enumerate(row):

               ws.cell(row=i + 1, column=j + 1, value= cell.value) #拷貝數值

               ws.cell(row=i + 1, column=j + 1).number_format=cell.number_format #拷數字格式

               ws.cell(row=i + 1, column=j + 1).alignment = .(cell.alignment) #

               ws.cell(row=i + 1, column=j + 1).font = .(cell.font) #拷貝字體

               ws.cell(row=i + 1, column=j + 1).border = .(cell.border) #拷貝值

              ws.cell(row=i + 1, column=j + 1).fill = .(cell.fill) #拷貝填充顏色答慎行

for merg in wr.merged_cells:

         ws.merge_cells(str(merg)) #合並單元格   

wb2.save(targFile)

這樣數據就能完美的從從A拷貝到B啦.格式樣式完全一樣.

但是 也有兩個我沒有攻克的問題 在這孝賣里說一下吧 希望有大佬能解決並告知在下 ,不勝感激

問題一 從表A中拷貝數據到表B以後 如果表B裡面也設置了對數據的公式計算,這個時候 如果不打開表B,直接再把表B裡面求和的數據 拷貝到表C的話  數值是拷貝不過去的.打開表C會發現沒有數值,我查了一些資料 好像是說 表B裡面的數 如果是像上面這樣拷貝過去然後通過公式直接計算的值 沒有保存上.   所以  要想把數值拷貝到C或者讀出來的話 ,需要手動打開表B然後,關閉的時候保存一下才可以.這是問題一.   因為清嘩我遇到了一個這樣的需求,需要連續拷貝從A拷到B,再把B裡面求和的數據拷到C.希望有大佬能夠指點一下

問題二就比較神奇了

我把表A裡面的數據拆分拷貝到了另外五個匯總的表格裡面,這五個其中有一個打開以後會報錯,顯示 excel文件格式錯誤.這五個表格在拷貝數據以前就已經存在了,那個時候打開都是沒有問題的,只有在拷貝完數據以後會報錯,我也不清楚具體的原因. 查了一些資料以後知道,excel表格其實是一種特殊的壓縮包,只要把後綴改成zip就可以打開這個壓縮文件,然後我找到報錯的那個文件,然後用這個報錯的文件和正常的文件裡面這個去做了對比,發現莫名其妙的多了一些東西,刪除掉以後再打開就正常了. 這也是我沒有解決的問題,希望有大佬能夠指點一二 具體的報錯 截圖 就是文章中附帶的截圖

⑤ python 中如何實現對文件的復制、粘貼

用shutil模塊
#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import os.path
from shutil import

dest_dir = ur'd:\新建文件專夾屬'
if not os.path.isdir(dest_dir):
os.makedirs(dest_dir)

file_path = ur'c:\123\1.txt'
(file_path, dest_dir)

⑥ Python復制文件命令合集

python的shutil模塊提供了便捷的復制文件命令

shutil.(srcfile,dstfile)  #拷貝文件,目標文件必須存在,否則就會報錯

shutil.file(srcfile,dstfile)  #拷貝文件,目標 文件無需巧蘆凳存在

shutil.tree(srcdir,dstdir)    #srcdir為源目錄,dstdir為目標目錄,復制時,如果dstdir已經存在時,會報FileExistsError錯誤,提示「當文件已存在時,無法創建該文件」

shutil.mode(src, dst)     # 僅拷貝許可權。內孝旅容、組、用戶均不變,目標文件嘩昌必須存在

⑦ 如何用python復制文件和文件夾

這個方法不能把物備文件夾復制到文件夾裡面去。

10.shutil.tree('E:\test\good', 'E:\test\vivi')

tree不能把文件夾復制喚螞到已存在的文件夾裡面去。

11.shutil.tree('E:\test\good', 'E:\test\new folder')

只罩鏈毀能復制到新創建的文件夾裡面。

有相同名字的文件,就會出錯,注意修改文件名。

⑧ python復制excel文件

# -*- coding: utf-8 -*-
import xlrd
import shutil
import os
def read_excel():
# 打開文件
workbook = xlrd.open_workbook(r'C:\Users\xxx\Desktop\xxx.xls')
# 獲取所有sheet
print (workbook.sheet_names()) # [u'sheet1', u'sheet2']
#獲取sheet
sheet= workbook.sheet_names()[0]
sheet_data=workbook.sheet_by_name(sheet)
print(sheet_data)
# sheet的名稱,行數,列數
print (sheet_data.name,sheet_data.nrows,sheet_data.ncols)
rows = sheet_data.row_values(0) # 獲取第四行內容
cols = sheet_data.col_values(2) # 獲取第三列內容
print (rows)
for i,j in enumerate(rows):
print(i,':',j)

for i in range(sheet_data.nrows):
strr=sheet_data.row_values(i)[5][:5]
if(strr == 'AXIAL'):
dicom_path=sheet_data.row_values(i)[15]
row_path=sheet_data.row_values(i)[16]
print(row_path)
roww=row_path.split('\\',3)[3]
print(roww)
#row_path='C:\Users\xxx\Desktop\xxx'
path_now=os.path.join('\\\\xxx',roww)
print(path_now)
shutil.tree(path_now,r'C:\Users\xxx\Desktop\Get')
#shutil.tree(row_path,r'C:\Users\xxx\Desktop')
break

if __name__ == '__main__':
read_excel()

#文件復制主要利用shutil包,tree的第一個參數為需要復制的文件夾,第二個參數為目標位置;但第二個參數的目標位置必須不存在,否則會報錯。

⑨ python直接安裝後的文件夾能使用嗎

python直接安裝後的文件夾不能使用。如果是直接拷貝.py腳本文件到其他沒裝python的電腦上是不能運行的,如果想把編寫的腳本在其他電腦上洞伏虧直接雙擊運行,可納神以去下載pyinstaller庫,windows可直接pipinstallpyinstaller安裝,然後在打開命令行,cd到腳本文件的目錄或者在腳本文件的目錄打開cmd,然後輸入pyinstallerF加上腳本文件名(記得加上文件後綴)廳拍。

⑩ Python的shutil模塊中文件的復制操作

shutil.file(src, dst):將名為src的文件的內容復制到名為dst的文件中 。

src, dst是文件名

shutil.(source, destination)
shutil.() 函數實現文件復制功能,將 source 文件復制游睜到 destination 文件夾中,兩個參數滾磨指都是字元串格式。如果 destination 是一大配個文件名稱,那麼它會被用來當作復制後的文件名稱,即等於 復制 + 重命名。

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

舉例如下:

shutil 模塊

閱讀全文

與python拷貝文件內容相關的資料

熱點內容
台灣影視在線 瀏覽:763
孩子們的秘密演員是誰 瀏覽:150
js文件可以刪除文件 瀏覽:743
安卓手機如何打開qct文件 瀏覽:504
哪個郵箱發文件快 瀏覽:454
優酷vip共享賬號密碼 瀏覽:473
車震電影韓劇 瀏覽:485
安卓軟體無法觸摸 瀏覽:757
鬼片電影免費1001鬼片電影免費 瀏覽:194
xp單個文件 瀏覽:685
網路電子地圖的主要類型 瀏覽:80
java提交表單亂碼 瀏覽:541
大數據金融的核心數據 瀏覽:141
全部動畫片免費觀看 瀏覽:479
李采潭飾演老師是什麼電影 瀏覽:239
jsp分頁查詢sql 瀏覽:397
歐洲電影三大家 瀏覽:846
如何在天天基金app看持基天數 瀏覽:764
什麼直播app優化 瀏覽:12
文件名陰影 瀏覽:619

友情鏈接