溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用python實(shí)現(xiàn)文件備份

發(fā)布時(shí)間:2022-02-07 15:55:10 來(lái)源:億速云 閱讀:148 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“怎么用python實(shí)現(xiàn)文件備份”,在日常操作中,相信很多人在怎么用python實(shí)現(xiàn)文件備份問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用python實(shí)現(xiàn)文件備份”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

    1、需求

    用戶輸入當(dāng)前目錄下任意文件名,程序完成對(duì)該文件的備份功能。

    備份文件名為xx[備份]后綴,例如:test[備份].txt

    2、步驟

    接收用戶輸入的文件名。規(guī)劃備份文件名。備份文件寫入數(shù)據(jù)。

    3、代碼實(shí)現(xiàn)

    (1)接收用戶輸入目標(biāo)文件名

    old_name = input('請(qǐng)輸入您要備份的文件名:')

    (2)規(guī)劃備份文件名

    2.1 提取目標(biāo)文件后綴。
    2.2 組織備份的文件名,xx[備份]后綴。

    # 2.1 提取文件后綴點(diǎn)的下標(biāo)
    index = old_name.rfind('.')
    
    # 2.2 組織新文件名 舊文件名 + [備份] + 后綴
    new_name = old_name[:index] + '[備份]' + old_name[index:]

    (3)備份文件寫入數(shù)據(jù)

    3.1 打開(kāi)源文件 和 備份文件。
    3.2 將源文件數(shù)據(jù)寫入備份文件。
    3.3 關(guān)閉文件。

    # 3.1 打開(kāi)文件
    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    
    # 3.2 將源文件數(shù)據(jù)寫入備份文件
    # 如果不確定目標(biāo)文件大小,循環(huán)讀取寫入,
    # 當(dāng)讀取出來(lái)的數(shù)據(jù)沒(méi)有了終止循環(huán)
    while True:
        # 每次在原文件中讀取的內(nèi)容
        con = old_f.read(1024)
        # 表示讀取完成了
        if len(con) == 0:
            # 終止讀取
            break
    
        # 新文件寫入讀取的數(shù)據(jù)
        new_f.write(con)
    
    # 3.3 關(guān)閉文件
    old_f.close()
    new_f.close()

    (4)思考

    如果用戶輸入.txt,這是一個(gè)無(wú)效文件,程序如何更改才能限制只有有效的文件名才能備份?

    答:添加條件判斷即可。

    # 有文件名,才能提取后綴
    # 這里無(wú)法取得后綴,拼接的時(shí)候沒(méi)有后綴的變量
    # 就會(huì)報(bào)錯(cuò)
    if index > 0:
        postfix = old_name[index:]

    (5)完整編碼

    1)傳統(tǒng)實(shí)現(xiàn)

    # 1. 用戶輸入目標(biāo)文件  如:sound.txt.mp3
    old_name = input('請(qǐng)輸入您要備份的文件名:')
    
    # 2. 規(guī)劃備份文件的名字
    # 2.1 提取后綴 --
    # 找到名字中的最右側(cè)的點(diǎn)才是后綴的點(diǎn)
    # 在右側(cè)查找rfind()方法
    # 獲取文件全名中后綴.的位置
    index = old_name.rfind('.')
    
    
    # 4. 思考:有效文件才備份 .txt
    if index > 0:
        # 提取后綴,這里提取不到,后面拼接新文件名字的時(shí)候就會(huì)報(bào)錯(cuò)
        postfix = old_name[index:]
    
    # 2.2 組織新名字 = 原名字 + [備份] + 后綴
    # 原名字就是字符串中的一部分子串 -- 切片[開(kāi)始:結(jié)束:步長(zhǎng)]
    # new_name = old_name[:index] + '[備份]' + old_name[index:]
    new_name = old_name[:index] + '[備份]' + postfix
    
    
    # 3. 備份文件寫入數(shù)據(jù)(數(shù)據(jù)和原文件一樣)
    # 3.1 打開(kāi) 原文件 和 備份文件
    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    
    # 3.2 原文件讀取,備份文件寫入
    # 如果不確定目標(biāo)文件大小,循環(huán)讀取寫入,當(dāng)讀取出來(lái)的數(shù)據(jù)沒(méi)有了終止循環(huán)
    while True:
        # 每次在原文件中讀取的內(nèi)容
        con = old_f.read(1024)
        # 表示讀取完成了
        if len(con) == 0:
            # 終止讀取
            break
    
        # 新文件寫入讀取的數(shù)據(jù)
        new_f.write(con)
    
    # 3.3 關(guān)閉文件
    old_f.close()
    new_f.close()

    2)實(shí)際工作實(shí)現(xiàn)

    # 1. 用戶輸入目標(biāo)文件  如:sound.txt.mp3
    old_name = input('請(qǐng)輸入您要備份的文件名:')
    
    # 獲取文件全名中后綴.的位置
    index = old_name.rfind('.')
    
    # 4.有效文件才備份 .txt
    if index > 0:
        postfix = old_name[index:]
    
    # 3.開(kāi)始備份文件
    # 打開(kāi)原文件
    with open(old_name , 'rb') as file_obj:
        # 組織新名字 = 原名字 + [備份] + 后綴
        new_name = old_name[:index] + '[備份]' + postfix
    
        # 創(chuàng)建并打開(kāi)新文件
        with open(new_name, 'wb') as new_obj:
            # 定義每次讀取的大小
            chunk = 1024 * 100
    
            while True:
                # 從已有的對(duì)象中讀取數(shù)據(jù)
                content = file_obj.read(chunk)
    
                # 內(nèi)容讀取完畢,終止循環(huán)
                if not content:
                    break
    
                # 將讀取到的數(shù)據(jù)寫入到新對(duì)象中
                new_obj.write(content)

    兩種方式實(shí)現(xiàn)的功能一樣。

    4、再來(lái)一個(gè)小練習(xí)

    需求:二進(jìn)制文件讀?。▽?shí)現(xiàn)方式和上邊一樣)

    # 讀取模式
    # t 讀取文本文件(默認(rèn)值)
    # b 讀取二進(jìn)制文件
    
    file_name = “hello.txt”
    
    with open(file_name , 'rb') as file_obj:
        # 讀取文本文件時(shí),size是以字符為單位的
        # 讀取二進(jìn)制文件時(shí),size是以字節(jié)為單位
        # print(file_obj.read(100))
    
        # 將讀取到的內(nèi)容寫出來(lái)
        # 定義一個(gè)新的文件
        new_name = 'aa.txt'
    
        with open(new_name , 'wb') as new_obj:
    
            # 定義每次讀取的大小
            chunk = 1024 * 100
    
            while True :
                # 從已有的對(duì)象中讀取數(shù)據(jù)
                content = file_obj.read(chunk)
    
                # 內(nèi)容讀取完畢,終止循環(huán)
                if not content :
                    break
    
                # 將讀取到的數(shù)據(jù)寫入到新對(duì)象中
                new_obj.write(content)

    注意:純文本文件也可以使用二進(jìn)制方法進(jìn)行讀取操作。

    到此,關(guān)于“怎么用python實(shí)現(xiàn)文件備份”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI