Python I/O及FIle方法

1、文件操做ide

文件的編碼格式:
ASCII與UNICODE:
計算機有256個ASCII字符(8個0/1的排列組合方式一共有256種, 2**8)
UTF-8是UNICODE的一種編碼格式,計算機中使用1~6個字節來表示一個UTF-9字符,涵蓋了地球上幾乎全部地區的文字,漢字使用3個字節表示編碼

 

open(file, mode = 'r', buffering = -1 , encoding=None, errors = None, newline = None, closefd = True,opener = None)spa

八個參數意義:指針

  • file——可表示文件名,也但是相對當前目錄的路徑,或者是絕對路徑;
  • mode——設置文件的打開模式:r——只讀(默認),w——寫入(不存在則建立,存在則覆蓋),x——文件存在拋異常,不存在則建立並寫入,a——追加(若已存在則追加到文件末尾),+——更新模式。通常文本文件使用「r+,w+,x+,a+」,二進制文件採用「rb+,wb+,xb+,ab+」
  • buffering——緩衝策略,默認值-1,自動設置緩衝區4096或8192字節,當值爲0時關閉緩衝區,數據將直接被寫入文件。使用緩衝區是爲了提升效率減小IO操做,當文件關閉或刷新緩衝區時,數據才真正被寫入。
  • encoding和errors——打開文件編碼、發生錯誤時處理方案
  • newline——設置換行模式
  • closefd和opener——調用close方法關閉文件,opener是打開文件時執行的一些加工操做,返回一個文件描述符。

通常只使用前兩個參數。code

文件內容讀取:orm

filename = 'E:/a.txt'
try: f = open(filename) except OSError: print('打開文件失敗') else: try: content = f.read() print(content) except OSError: print('文件讀取失敗') finally: f.close()
View Code

注意:blog

  在編寫代碼時,最好是open以後當即編寫文件關閉方法,即close(),以避免忘記關閉文件,形成系統資源損耗,影響後續對其餘文件的訪問。utf-8

  在讀取文件時,read方法將一次性讀取文件全部內容,讀取文件的指針將會從開頭一直移動到末尾。資源

  在第一次read讀取以後,再次調用read()方法,將不可以獲取到內容,由於此時文件指針移動到了文件末尾。rem

 

簡單代碼:

with open('E:/a.txt', 'r') as f: content = f.read() print(content)
View Code

讀取文件並複製(w——寫入(不存在則建立,存在則覆蓋)):

filename = 'E:/a.txt' with open(filename, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines) copy_f_name = 'E:/copy_a.txt' with open(copy_f_name, 'w', encoding='utf-8') as copy_f: copy_f.writelines(lines) print('{}成功複製到{}'.format(filename, copy_f_name)) 結果: ['hellohellohellohello'] E:/a.txt成功複製到E:/copy_a.txt
View Code

二進制文件讀寫:

  • read(size = -1):size限制讀取的行數,size = -1時讀取所有字節
  • readline(size = -1)讀取並返回一行,參數同上
  • readlines(hint = -1)讀取數據到一個列表中,每個行數據是列表的一個元素,hint限制讀取的行數,值爲-1是不限制
  • write(b):寫入b字節,並返回字節數
  • writelines(lines):向文件中寫入一個列表,不添加分隔符,每一行末尾提供分隔符
  • flush(),刷新緩衝區,將緩衝區數據寫入文件中。

 二進制文件複製(wb——二進制文件寫入(不存在則建立,存在則覆蓋)):

filename = 'E:/頭像.jpg' with open(filename,'rb') as f: b = f.read() copy_f_name = 'E:/頭像_Copy.jpg' with open(copy_f_name,'wb') as copy_f: copy_f.write(b) print('二進制文件複製成功!')
View Code

 2、OS模塊——系統目錄與文件的管理:

  • os.rename(src, dst):修改源文件src成目標文件dst,可爲相對路徑或絕對路徑;
  • os.remove(path):刪除path目錄下指定文件,若爲路徑,則OSError;
  • os.mkdir(path):建立path目錄,若已存在,則FileExistsError;
  • os.rmdir(path):刪除path目錄:目錄非空,則OSError;
  • os.walk(top):遍歷top目錄樹,自上而下,返回三元組(目錄路徑,目錄列表,文件名列表);
  • os.listdir(dir):列出指定目錄中的文件和子目錄;
  • os.curdir:得到當前目錄;
  • os.pardir:得到當前父目錄。
import os f_name = 'E:/a.txt' copy_f_name = 'E:/a_copy.txt' with open(f_name, 'r') as f: b = f.read() with open(copy_f_name, 'w') as copy_f: copy_f.write(b) # 判斷是否存在,不然文件重命名
try: os.rename(copy_f_name, 'E:/b.txt') except OSError: os.remove('E:/b.txt') # 輸出當前目錄及父目錄
print(os.listdir(os.curdir)) print(os.listdir(os.pardir)) # 判斷路徑是否存在,不然刪除路徑
try: os.mkdir('E:/filesdir') except OSError: os.rmdir('E:/filesdir') for i in os.walk('E:/桌面'): print(i)
View Code

 

結果:

 

 

3、os.path模塊

  • os.path.abspath(path)——返回絕對路徑
  • os.path.basename(path)——返回基礎名(若是path指向文件,則返回文件名,指向目錄,則返回最後目錄名)
  • os.path.dirname(path)——返回path中的目錄
  • os.path.exists(path)——path是否存在
  • os.path.isdir(path)——path是文件,返回True
  • os.path.getatime(path)——path是目錄,返回True
  • os.path.getmtime(path)——返回最後訪問時間(自1970-1-1 00:00:00來的總秒數)
  • os.path.getctime(path)——返回最後修改時間(自1970-1-1 00:00:00來的總秒數)
  • os.path.getsize(path)——返回文件大小,單位字節。

示例:

import os.path from datetime import datetime f_name = '搶火車票.py' all_name = r'C:\Users\Jery\PycharmProjects\CollectImages\搶火車票.py'
# 基礎名部分
basename = os.path.basename(all_name) print(basename) # 目錄部分
dirname = os.path.dirname(all_name) print(all_name) # 絕對路徑
print(os.path.abspath(f_name)) # 文件大小
print(os.path.getsize(f_name)) # 最近訪問時間
atime = datetime.fromtimestamp(os.path.getatime(f_name)) print(atime) # 最近修改時間
mtime = datetime.fromtimestamp(os.path.getmtime(f_name)) print(mtime) # 建立時間
ctime = datetime.fromtimestamp(os.path.getctime(f_name)) print(ctime) print(os.path.isdir(dirname)) print(os.path.isfile(f_name)) print(os.path.exists(f_name)) 結果: 搶火車票.py C:\Users\Jery\PycharmProjects\CollectImages\搶火車票.py C:\Users\Jery\PycharmProjects\CollectImages\搶火車票.py 5673
2019-03-27 11:19:39.251669
2019-03-27 11:19:39.251669
2019-03-15 19:48:48.315313 True True True Process finished with exit code 0
View Code
相關文章
相關標籤/搜索