2016年6月28日 星期二

[Python]Python中檔案file的處理及使用shutil搬移

OpenCV應用總整理
https://jennaweng0621.pixnet.net/blog/post/403630133-%5bpython%5d-opencv%E6%87%89%E7%94%A8%E7%B8%BD%E6%95%B4%E7%90%86
Python的檔案處理
檔案處理在Python下有很多種應用,我們可以用來新增 搬移 讀取 寫入等等
確認檔案在不在
開啟檔案
 f = open('檔案', '模式')
模式有
r - 讀取(檔案需存在)
w - 新建檔案寫入(檔案可不存在,若存在則清空)
a - 資料附加到舊檔案後面(游標指在EOF)
r+ - 讀取舊資料並寫入(檔案需存在且游標指在開頭)
w+ - 清空檔案內容,新寫入的東西可在讀出(檔案可不存在,會自行新增 **最好用)
wb+ - 清空檔案內容,新寫入的東西為二進位模式,可再讀出(檔案可不存在,會自行新增 **最好用)
a+ - 資料附加到舊檔案後面(游標指在EOF),可讀取資料
b - 二進位模式
 

讀取文件內容

f.read(size) - 回傳檔案內容
size為要讀取進來的字串長度,若不填則讀取整份文件
#file.py
f = open('news.txt','r')
print(f.read())
f.readline() - 讀取一行,最後面會加上一個 \n
f.readlines() - 傳回一list ,每一行文字最後面會加上一個 \n 為一個list的資料項

寫入檔案內容

語法為
f.write(string) - 寫入檔案,並回傳寫入的string長度
 
f = open('news.txt','a')
f.write('欲寫入的文字\n')
 

游標位置

檔案讀寫時,游標的位置可以用seek()控制
語法為
f.seek(位移的bit數)
預設從文件的開頭開始計算
可在指定從哪邊開始
f.seek(位移的bit數,0) - 從文件開頭開始
f.seek(位移的bit數,1) - 從目前游標位置開始
f.seek(位移的bit數,2) - 從目前文件結尾開始
 
判斷檔案是否存在
import os
使用方式 :
if os.path.exists(file_path):
如果存在的話 會是True便會進入執行。

判斷是否是檔案
import os
import os.path

PATH='./abc.txt' #現有祿境下的abc.txt

if os.path.isfile(PATH) and os.access(PATH, os.R_OK): #確認是路徑是個檔案 而且可以讀取
    print "File exists and is readable"
else:
    print "Either file is missing or is not readable"
 
移除檔案跟資料夾

stackoverflow上的文章 - How do I delete a file or folder in Python? 有提到

os.remove() 會移除一個檔案
os.rmdir() 會移除一個空的資料夾
shutil.rmtree() 會移除一個資料夾及裡面的東西
所以當我們想要移除一資料夾裡面的東西時使用 shutil.rmtree()


Python搬移檔案的應用

import shutil
file_path = file_path + item_name  #檔案路徑加檔名
print(file_path)
if os.path.exists(file_path):
    slog.print_and_save_test_Log(key, "file_path : " + file_path + " is exist.")
    shutil.copyfile(file_path , KEY_Target_path + item_name) 
# 這行重要 除了來源路徑外,對像路徑以及檔名都要指定 否則無法複製檔案達到檔案搬移
    slog.print_and_save_test_Log(key, " copy file : " + str(i) + 
    " from source : " + KEY_SourceDict[key] + " to target : " + 
    str(KEY_TargetDict[key]) + " successful")
else:
    slog.print_and_save_test_Log(key, " file_path : " + file_path + " is NOT exist.
")

沒有留言:

張貼留言