一、Python拷貝文件夾以及子目錄
Python提供了shutil庫中的copytree()函數來實現文件夾的拷貝。該函數的使用方法為:
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
其中src表示需要拷貝的原文件夾路徑,dst表示目標文件夾路徑。symlinks參數表示是否拷貝目錄軟鏈接,ignore參數表示需要排除的文件,copy_function參數表示拷貝時使用的函數,ignore_dangling_symlinks參數表示是否忽略軟鏈接不存在的錯誤。
下面是一個實現拷貝整個文件夾及其子目錄的例子:
import shutil import os src_folder = '/path/to/source/folder' dst_folder = '/path/to/destination/folder' # 創建目標文件夾 os.makedirs(dst_folder) # 拷貝文件夾 shutil.copytree(src_folder, dst_folder)
在執行該代碼後,會將原文件夾(包括其子目錄)完全拷貝到目標文件夾中。
二、Python拷貝圖片到指定文件夾
Python拷貝單一類型的文件可以使用glob庫中的glob()函數來獲取文件列表,然後遍歷列表逐一複製。下面是一個例子,拷貝當前目錄下所有jpg和png圖片到指定文件夾:
import shutil import glob import os image_folder = '/path/to/image/folder' dst_folder = '/path/to/destination/folder' # 獲取jpg和png文件列表 image_list = glob.glob(os.path.join(image_folder, '*.[jp][pn]g')) # 創建目標文件夾 os.makedirs(dst_folder) # 遍歷列表逐一複製 for image_path in image_list: shutil.copy(image_path, dst_folder)
該代碼通過使用os.path.join()方法拼接路徑,獲取當前目錄下所有jpg和png圖片的列表,然後遍歷列表,逐一使用shutil庫中的copy()方法將文件複製到指定文件夾中。
三、Python拷貝文件夾到文件夾
使用shutil庫中的copytree()函數可以將原文件夾完整拷貝至目標文件夾,並在目標文件夾中創建一個與原文件夾同名的文件夾。
import shutil import os src_folder = '/path/to/source/folder' dst_folder = '/path/to/destination/folder' # 創建目標文件夾 os.makedirs(os.path.join(dst_folder, os.path.basename(src_folder))) # 拷貝文件夾 shutil.copytree(src_folder, os.path.join(dst_folder, os.path.basename(src_folder)))
在執行該代碼後,會將原文件夾完全拷貝到目標文件夾中,同時在目標文件夾中創建一個與原文件夾同名的文件夾。
四、Python拷貝文件夾到指定路徑
使用shutil庫中的copytree()函數可以將原文件夾完整拷貝到指定路徑中。
import shutil import os src_folder = '/path/to/source/folder' dst_folder = '/path/to/destination/folder' # 拷貝文件夾 shutil.copytree(src_folder, os.path.join(dst_folder, os.path.basename(src_folder)))
在執行該代碼後,會將原文件夾完全拷貝到目標文件夾中。
五、Python拷貝文件夾目錄和文件
使用shutil庫中的copy2()函數可以複製整個文件目錄及其內容,包括文件夾內容和文件元數據(文件的許可權等)。
import shutil import os src_folder = '/path/to/source/folder' dst_folder = '/path/to/destination/folder' # 獲取源文件夾中所以文件和文件夾 for root, dirs, files in os.walk(src_folder): # 創建對應的目標文件夾 dst_root = root.replace(src_folder, dst_folder) os.makedirs(dst_root) # 複製所有的文件和文件夾 for directory in dirs: src_path = os.path.join(root, directory) dst_path = os.path.join(dst_root, directory) shutil.copy2(src_path, dst_path) for file in files: src_path = os.path.join(root, file) dst_path = os.path.join(dst_root, file) shutil.copy2(src_path, dst_path)
該代碼採用os庫中的walk()方法,查找源文件夾中的所有文件和文件夾,並逐一在目標文件夾中創建相應的目錄結構和文件,並使用shutil庫中的copy2()方法複製文件及其元數據到目標文件夾中。
六、Python如何拷貝文件
在Python中,使用shutil庫中的copy()函數可以拷貝單個文件。
import shutil import os src_file = '/path/to/source/file' dst_file = '/path/to/destination/file' shutil.copy(src_file, dst_file)
該代碼使用shutil庫中的copy()方法,將指定路徑下的文件複製到指定目標路徑中。
七、Python拷貝文件夾下的所有圖片
使用glob庫可以快速獲取指定文件夾下所有類型的文件,通過遍歷獲取的文件列表,再使用shutil庫中的copy()函數逐一複製至指定目標文件夾中。
import glob import shutil import os src_folder = '/path/to/source/folder' dst_folder = '/path/to/destination/folder' # 創建目標文件夾 if not os.path.exists(dst_folder): os.makedirs(dst_folder) # 遍歷指定文件夾下所有jpg、jpeg和png文件 for image_file in glob.glob(os.path.join(src_folder, '*.jpg')) + glob.glob(os.path.join(src_folder, '*.jpeg')) + glob.glob(os.path.join(src_folder, '*.png')): shutil.copy(image_file, os.path.join(dst_folder, os.path.basename(image_file)))
該示例使用glob庫獲取指定文件夾下所有jpg、jpeg和png文件,遍歷文件列表,然後逐一使用shutil庫中的copy()函數複製文件,最終將文件複製到指定目標文件夾中。
八、Python文件拷貝
使用shutil庫的copy()函數可以將單個文件複製到指定位置。
import shutil import os src_file = '/path/to/source/file' dst_file = '/path/to/destination/file' shutil.copy(src_file, dst_file)
該代碼使用shutil庫中的copy()方法,將指定路徑下的文件複製到指定目標路徑中。
九、Python深拷貝和淺拷貝
Python中的拷貝操作分為深拷貝和淺拷貝兩種,分別適用於不同的場景。
淺拷貝
淺拷貝只複製對象的父對象,不會複製對象內部成員,所以當原對象內部發生改變時,拷貝對象也會發生同樣的改變。
import copy a = [1, 2, 3] b = copy.copy(a) # 將a中的第一個元素修改為4 a[0] = 4 print(a) # [4, 2, 3] print(b) # [1, 2, 3]
上述代碼中,使用copy庫中的copy()方法進行淺拷貝操作,將列表a中的元素複製到列表b中,當修改a列表的第一個元素後,b列表不會發生變化。
深拷貝
深拷貝會複製對象的所有成員,所以當原對象內部發生改變時,拷貝對象不會發生同樣的改變。
import copy a = [1, 2, [3, 4]] b = copy.deepcopy(a) # 將a中的列表元素修改為[5, 6] a[2] = [5, 6] print(a) # [1, 2, [5, 6]] print(b) # [1, 2, [3, 4]]
上述代碼中,使用copy庫中的deepcopy()方法進行深拷貝操作,將列表a中的元素複製到列表b中,當修改a列表的第三個元素後,b列表不會發生變化。
十、Python深拷貝和淺拷貝詳解
深拷貝和淺拷貝是Python中常用的拷貝方式。對於淺拷貝,只拷貝對象的基本信息,對於對象內部引用的成員數據,只是複製了指向該成員的引用,而沒有真正拷貝該成員;對於深拷貝,會遞歸拷貝對象及其內部引用的成員數據,生成一個完全獨立的對象。
需要注意的是,在Python中,某些對象是不可拷貝的,例如文件、網路連接等,會報錯。
下面是一個綜合示例,同時展示了不同對象在淺拷貝和深拷貝中的表現:
import copyclass TestClass:
def __init__(self):
self.name = 'Test'class SubClass:
def __init__(self):
self.name = 'Sub'class ParentClass:
def __init__(self):
self.name = 'Parent'
self.sub_class = SubClass()a = [1, 2, [3, 4]]
b = copy.copy(a)
c = copy.deepcopy(a)print(f'a: {a}, id: {id(a)}, id of element[2]: {id(a[2])}')
print(f'b: {b}, id: {id(b)}, id of element[2]: {id(b[2])}')
print(f'c: {c}, id: {id(c)}, id of element[2]: {id(c[2])}')a[2][0] = 5
print(f'a: {a}, id: {id(a)}, id of element[2]: {id(a[2])}')
print(f'b: {b}, id: {id(b)}, id of element[2]: {id(b[2])}')
print(f'c: {c}, id: {id(c)}, id of element[2]: {id(c[2])}')a = TestClass()
b = copy.copy(a)
c = copy.deepcopy(a)print(f'a: {a.name}, id: {id(a)}, id of sub_class: {id(a.sub_class)}')
print(f'b: {b.name}, id: {id(b)}, id of sub_class: {id(b.sub_class)}')
print(f'c: {c.name}, id: {id(c)}, id of sub_class: {id(c.sub_class)}')a.name = 'New'
a.sub_class.name = 'New'
print(f'a: {a.name}, id: {id(a)}, id of sub_class: {id(a.sub_class)}')
print(f'b: {b.name}, id: {id(b)}, id of sub_class: {id(b.sub_class)}')
print(f'c: {c.name}, id: {id(c)}, id of sub_class: {id(c.sub_class)}')a = ParentClass()
b = copy.copy(a)
c = copy.deepcopy(a)print(f'a: {a.name}, id: {id(a)}, id of SubClass: {id(a.sub_class)}')
print(f'b: {b.name}, id: {id(b)}, id of SubClass: {id(b.sub_class)}')
print(f'c: {c.name}, id: {id(c)}, id of SubClass: {id(c.sub_class)}')a.name = 'New'
a.sub_class.name = 'New'
print(f'a: {a.name}, id: {id(a)}, id of SubClass: {id(a.sub_class)}')
print(f'b: {b.name}, id: {id(b)}, id of SubClass: {id(b.sub_class)}')
print(f'c: {c.name},原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192325.html