星期二, 1月 31, 2017

20170131 python Python程式設計實務_練習小記

20170131_python_Python程式設計實務_練習小記

Github:

Client: openSUSE Leap 42.2 with vi and PyCharm

今天接觸 os, shutil 以及 glob 模組
覺得接觸不同模組來練習, 感覺還不錯, 另外也更新心智圖 :)

練習相關檔案

檔案: 5-2.py

# -*- coding: utf-8 -*-
# 因為是學習 python, 所以用了很多 print() 來觀察
import os, shutil, glob
source_dir = "images/"
# 透過 os 模組來取得 / 目錄相關狀態
disk = os.statvfs("/")
print(disk)

# 目前可用空間計算
freespace = disk.f_bsize * disk.f_blocks
print(freespace)

# 透過 glob 模組來取得目前檔案, 以 list 型態存放
pngfiles = glob.glob(source_dir+"*.png")
jpgfiles = glob.glob(source_dir+"*.jpg")
giffiles = glob.glob(source_dir+"*.gif")
allfiles = pngfiles + jpgfiles + giffiles
print(allfiles)

allfilesize = 0
# allfilesize 型態是 int, 所以用 str轉型來顯示
print("allfilesize:  " + str(allfilesize))

# 使用 for 來計算目前檔案大小
for f in allfiles:
   allfilesize += os.path.getsize(f)
print("allfilesize:  " + str(allfilesize))

# 如果所有檔案大小 > 目前可用空間 顯示空間不足, 離開程式
if allfilesize > freespace:
   print("磁碟空間不足")
   exit(1)

# 設定輸出資料夾, 預設在該目錄下的 output
target_dir = source_dir + "output"
print("target_dir:  " + target_dir)

# 檢查 target_dir 是否存在, 存在就離開
if os.path.exists(target_dir):
   print("資料夾已存在")
   exit(1)

# 建立  target_dir
os.mkdir(target_dir)
imageno = 0

for f in allfiles:
   # split() 將字串根據指定字元切成 list
   # 這邊最主要要取出檔案名稱 filename
   print("---- loop start ----")
   dirname, filename = f.split('/')
   print(dirname)
   print(filename)
   # 使用 split() 切出檔案名稱還有副檔名
   mainname, extname = filename.split('.')
   print(mainname)
   print(extname)
   # 定義輸出的檔案名稱在 target_dir 下, 以 imageno 為序號加副檔名
   targetfile = target_dir + '/' + str(imageno) + '.' + extname
   print(targetfile)
   # 使用 shutil 複製檔案
   shutil.copyfile(f, targetfile)
   # 將 imageno 加1
   imageno += 1
   print("---- loop end ----")



~ enjoy it

1 則留言:

Abiya Carol 提到...

Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.

Hadoop Training in Chennai
Dotnet Training in Chennai