python編程快速上手之第9章實踐項目參考答案

来源:http://www.cnblogs.com/mfyang/archive/2017/04/22/6749609.html
-Advertisement-
Play Games

本章介介紹了shutil,zipfile模塊的使用,我們先來認識一下這2個模塊吧。 一.shutil模塊 shutil模塊主要用於對文件或文件夾進行處理,包括:複製,移動,改名和刪除文件,在shutil模塊中主要以下這麼幾個函數: 1.複製文件和文件夾 shutil模塊提供了2個函數:shutil. ...


本章介介紹了shutil,zipfile模塊的使用,我們先來認識一下這2個模塊吧。

一.shutil模塊

shutil模塊主要用於對文件或文件夾進行處理,包括:複製,移動,改名和刪除文件,在shutil模塊中主要以下這麼幾個函數:

1.複製文件和文件夾

shutil模塊提供了2個函數:shutil.copy()和shutil.copytree()

shutil.copy的語法格式:

copy(src, dst)

作用:

將src處的文件複製到dst路徑中去,其中src,dst都是字元串形式的路徑。如果dst是一個文件名,它將作為被覆制文件的新名字,相當於把原路徑的文件複製到新路徑並改名。

舉例:

將/etc/my.cnf 複製到/root/mysql中

In [12]: import shutil

In [13]: shutil.copy('/etc/my.cnf','/root/mysql/')
Out[13]: '/root/mysql/my.cnf'

In [15]: ll /root/mysql/
total 4
-rw-r--r--. 1 root 960 Apr 22 16:57 my.cnf

將/etc/my.cnf複製到/root/mysql並改名為mysql.cnf

In [16]: shutil.copy('/etc/my.cnf','/root/mysql/mysql.cnf')
Out[16]: '/root/mysql/mysql.cnf'

In [17]: ll /root/mysql/
total 8
-rw-r--r--. 1 root 960 Apr 22 16:57 my.cnf
-rw-r--r--. 1 root 960 Apr 22 17:00 mysql.cnf

 

shutil.copytree的語法格式:

copytree(src, dst)

作用:

複製整個文件夾。將src處的文件夾,包括它的所有文件和子文件夾,複製到路徑dst處的文件夾。返回一個新複製的文件夾路徑的字元串。

舉例:

In [20]: shutil.copytree('/etc/yum.repos.d','/root/repo.back')
Out[20]: '/root/repo.back'

In [21]: ll /root/drwxr-xr-x. 2 root 4096 Apr 23  2017 repo.back/
drwxr-xr-x. 2 root 4096 Apr 23  2017 repo.bak/

註意:dst必須是一個系統中不存在目錄,不然會報錯:

In [20]: shutil.copytree('/etc/yum.repos.d','/root/repo.bak')
FileExistsError: [Errno 17] File exists: '/root/repo.bak'

2.文件和文件夾的移動和改名

shutil.move()

語法格式:

move(stc,dst)

作用:

將路徑stc處的文件夾移動到路徑dst,並返回新位置的絕對路徑的字元串。

舉例:

將/root/目錄下的a.txt移動到/root/test/目錄中

In [26]: shutil.move('/root/a.txt','/root/test/')
Out[26]: '/root/test/a.txt'

In [27]: ll /root/test
total 4
-rw-r--r--. 1 root 6 Apr 22 17:30 a.txt

註意:

如果dst指向一個文件夾,src文件將移動到dst中,並保持原來的文件名,前提是dst必須是系統中已經存在的目錄。

如果目標文件中已存在相同名稱的文件將被覆蓋,需要註意。

3.刪除文件和文件夾

在os模塊中:

os.remove(path)可以刪除一個文件

os.rmdir(path)可以刪除一個空文件夾。

在shutil模塊中:

shutil.rmtree(path)可以刪除一個文件夾及其所有的內容。

語法格式:

os.rmdir(path)
shutil.rmtree(path)

舉例:

 1 In [34]: os.remove('/root/test/a.txt')
 2 
 3 In [35]: ll /root/test/
 4 total 0
 5 
 6 In [36]: shutil.move('/root/CentOS-Base.repo','/root/test/')
 7 Out[36]: '/root/test/CentOS-Base.repo'
 8 
 9 In [37]: ll test
10 total 4
11 -rw-r--r--. 1 root 2573 Apr 23  2017 CentOS-Base.repo
12 
13 In [38]: shutil.rmtree('/root/test')
14 
15 In [39]: ll
16 total 12
17 -rw-------. 1 root 1468 Apr 16 21:03 anaconda-ks.cfg
18 drwxr-xr-x. 2 root   57 Apr 23  2017 download/
19 drwxr-xr-x. 2 root   37 Apr 22 17:00 mysql/
20 drwxr-xr-x. 6 root   95 Apr 16 21:58 py34/
21 drwxr-xr-x. 3 root   18 Apr 16 23:01 python/
22 drwxr-xr-x. 2 root 4096 Apr 23  2017 repo.back/
23 drwxr-xr-x. 2 root 4096 Apr 23  2017 repo.bak/

註意:

以上的刪除都是永久的刪除。為了安全起見最好使用send2trash第三方模塊,它會將刪除的文件放入回收站。在python3中已集成了這個模塊。

send2trash用法:

import send2trash
send2trash(path)

二.遍歷目錄樹

對文件的處理,尤其是批量操作就不得不對目錄進行遍歷。在python中os模塊中的os.walk()函數就可以做到。

這個函數會遞歸遍歷指定目錄及子目錄,返回一個3元組信息:當前目錄名,子目錄名,文件名,不包括 . 和 ..

常見用法:

#!/usr/bin/env python3.4
#coding:utf-8
import os
for foldName,subfolders,filenames in os.walk('/root/'):
    print('The current folder is: ' + foldName)
    for subfolder in subfolders:
        print('subfolder of ' + foldName + ':' + subfolder)
    for filename in filenames:
        print('file inside ' + foldName + ':' + filename)
    print('')

三.實踐項目參考答案

 1 #!/usr/bin/env python3.4
 2 # coding:utf-8
 3 import os
 4 import shutil
 5 import send2trash
 6 
 7 # 9.8.1
 8 # 拷貝指定格式文件到指定目錄,下麵程式是將/etc目錄下所的.conf文件拷貝到/root/test/目錄里。
 9 src = '/etc/'
10 dst = '/root/test/'
11 ftype = '.conf'
12 count = 0
13 for filename in os.listdir(src):
14     if filename.endswith(ftype):
15         shutil.copy(src + filename,dst)
16         count += 1
17         print('文件 ' + src + filename + '\t被拷貝到---> ' + dst + ' 目錄下')
18 print("該目錄下所有的 " + ftype + "文件已被拷貝到" + dst + "目錄下")
19 print('共拷貝了 ' + str(count) + ' 個文件')
20 
21 # 9.8.2
22 # 搜索指定目錄下大於100M的文件,列印出來並刪除
23 # 可以手動創建一個指定大小的空文件做試驗
24 # dd if=/dev/zero of=hello.txt bs=100M count=1
25 for foldname,subfolders,filenames in os.walk(dst):
26     for files in filenames:
27         if os.path.getsize(dst + files) / 1024 /1024 > 100:
28             print('大於100M的文件有:' + files + ' ' +  str(os.path.getsize(dst + files) / 1024 / 1024) +'Mb')
29             send2trash.send2trash(dst + files)
30 
31 # 9.8.3
32 # 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原題地址: 明明的隨機數 在不同的一些刷題代碼網站和給定的不同題目中,對於給定變數輸入的規則可能會有不同,一般來講,最常見的輸入方法來源於sys.stdin方法 例如這道簡單的題: 1.輸入描述:輸入多行,先輸入隨機整數的個數,再輸入相應個數的整數 2.輸出描述:返回多行,處理後的結果 3.處理要求 ...
  • 1. String fileName=new String(URLEncoder.encode(fileName,"utf-8")); getResponse().addHeader("Content-Disposition","attachment;filename="+fileName); 或者 ...
  • 字元串是編程中常用的類型,字元型在記憶體中是以單個形式存儲的,比如name = "alex",在記憶體中存儲的形式為["a","l","e","x"],因此我們可以使用列表的很多功能來操作字元串,因為我開始的時候一直在想為什麼字元串可以使用切片,可以有索引,開始的時候一直不明白,後來知道了Python字 ...
  • 顯示 the import java.util cannot be resolve,如何解決?我在使用eclipse的時候, 好像無意中更改了安裝位置(workspace),現在所有的包都顯示無法導入:the import java cannot be resolved 請問如何解決這個問題? 解決 ...
  • 為什麼要學習設計模式 1、軟體開發越來越複雜,對軟體設計的要求也越來越高。而軟體設計和架構的入門功夫就是深入理解和掌握設計模式。因此,設計模式的重要性就不言而喻了。 2、設計模式已經成為軟體開發人員的“標準辭彙” 3、學習設計模式是個人提高的捷徑。為什麼這麼說呢?因為設計模式其本質是很多前輩(大牛級 ...
  • Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have e... ...
  • 這次的題目是這樣的: 假設有一個6*6的棋盤,每個格子裡面有一個獎品(每個獎品的價值在100到1000之間),現在要求從左上角開始到右下角結束,每次只能往右或往下走一個格子,所經過的格子里的獎品歸自己所有。問最多能收集價值多少的獎品。 最先看到這個問題的時候腦子裡面的立馬出現許多的腦洞:暴力、二叉樹 ...
  • 自動載入類 上傳代碼: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...