Python 備份檔案,以及備份大檔案

2021-08-22 03:31:12 字數 1844 閱讀 3633

今天分享乙個很有用的小**~

就是關於檔案的備份

import os  #匯入os模組

ori_file_name = r'e:\python\mayday.***' #輸入檔案路徑

if os.path.isfile(ori_file_name): #判斷該路徑的是否是檔案

#擷取檔名,重組檔名

seek_num = ori_file_name.rfind('.')

new_file_name =ori_file_name[:seek_num]+'_copy'+ori_file_name[seek_num:]

#開啟原始檔

old_file = open(ori_file_name,'rb')

#讀取檔案資訊

old_file_content = old_file.read()

#建立新檔案

new_file = open(new_file_name,'wb')

#將原始檔案資訊寫入

new_file.write(old_file_content)

#關閉檔案

old_file.close()

new_file.close()

else:

print('沒有該檔案')

好,這個**就滿足一般檔案的copy了,

但是,如果遇到大檔案,在讀取檔案資訊的時候記憶體扛不住得話應該怎麼辦

emmmmm.....那肯定再買一條64g的記憶體啊!!!!

開個玩笑。我們下面對**進行改良,可達到省下乙個記憶體條的錢的效果

import os  # 匯入os模組

ori_file_name = r'd:\大檔案.rmvb' # 輸入檔案路徑

if os.path.isfile(ori_file_name): # 判斷該路徑的是否是檔案

# 擷取檔名,重組檔名

seek_num = ori_file_name.rfind('.')

new_file_name = ori_file_name[:seek_num] + '_copy' + ori_file_name[seek_num:]

# 開啟原始檔

old_file = open(ori_file_name, 'rb')

# 建立新檔案

new_file = open(new_file_name, 'ab')

# 讀取檔案資訊,這部會在後面解釋

# for i in old_file:

# if not i:

# break

new_file.write(i)

new_file.write(old_file.read())

# 關閉檔案

old_file.close()

new_file.close()

else:

print('沒有該檔案')

關於那個for迴圈,

最早的時候,我想的是用  for i in old_file.readlines(),後來發現,依然崩潰了,因為在使用readlines讀取檔案時,系統會吧該檔案整個檔案轉換成乙個列表,而這個列表會占用記憶體,所以雖然能剩去寫入時的記憶體,但是依然會浪費大部分資源。

後來我試試了如下**: print(isinstance(old_file,iterable)) ==>true  即old_file是可以迭代的,那麼,old_file的物件是原始檔,且這裡沒有對他在進行分解,所以在迭代old_file的時候不會占用空間,所以這樣就只會在寫入時候占用記憶體了以達到拷貝的效果。

以上是本人的見解,不知道是否有不對的地方,還希望有看到的大神幫忙指出~~

python 備份檔案指令碼

usr bin env python filename backup ver1.pyimport os import time source r d python test r d python test1 target dir d python test2 remember to change t...

vim備份檔案

vim 一般來說vim不會備份檔案,你可以執行 cp usr share vim vim64 vimrc example.vim vimrc 將vimrc example.vim拷貝到當前使用者的主目錄並改名為.vimrc,該檔案裡面如下 就開啟了vim的備份功能 if has vms setnob...

python 掃瞄備份檔案以及原始碼洩露

靈感來自於某個小哥在群裡閒聊的時候,談及自己一起提交過乙個知名 分站的原始碼洩露,並且收益不菲,我當時一愣,沒想到原始碼洩露這個漏洞還能賺不少積分,於是研究一番後,決定寫乙個專門掃瞄 重點敏感資訊洩漏的軟體,這個軟體的功能包括這三點。掃瞄備份檔案 掃瞄svn git原始碼洩漏 掃瞄webinfo頁面...