python 学习汇总1:文件读写 tcy
生活随笔
收集整理的這篇文章主要介紹了
python 学习汇总1:文件读写 tcy
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文件讀寫 2018/11/12
===============================================================================
1.1文件對象
open(name[, mode[, buffering]],encoding) #打開文件返回文件對象
參數(shù):
# 1)buffering:0無緩沖;大于1緩沖區(qū)大小字節(jié);負數(shù)默認緩沖區(qū)大小;用 flush 或者 close 時才會更新
# 2)字符編碼: 默認encoding='UTF-8' ;例如encoding='gbk'讀取GBK編碼的文件
# 3)errors:errors='ignore'忽略錯誤
# 編不規(guī)范文件(在文件中夾雜一些非法編碼字符)會UnicodeDecodeError
----------------------------------------------------------------
1.2.屬性
f.closed #文件已關(guān)閉返回True
f.mode #文件的I/O模式
f.name #文件名稱
f.newlines #換行符為None 或其他換行符
f.encoding #文件編碼
----------------------------------------------------------------1.3.方法
f.read([size]) #讀文件字符串 (缺省:全部;size:字符串長度;末尾\n)
file.readline([n]) #讀一行信息 (缺省:讀一行;n:讀n個字符;尾加\n;)
f.readlines() #讀出所有行 (尾\n)['Welcome \n', 'There\n', 'ha\n']
f.write(string) # 將str寫文件 f.write('This is a test\n'))#15
f.writelines(list) # 將list中字符串連續(xù)寫入文件沒有換行
f.seek(offset,from_what) #移動文件指針
# 偏移量Offset:指定引用位置移動 offset
# 起始位置from_what:0文件開始(默認);1指針位置,2末尾
f.tell() #當(dāng)前文件位置int
f.close() #關(guān)閉文件返回True
f.fileno() #獲得文件描述符數(shù)字
f.flush() #清除輸出緩沖區(qū)刷新輸出緩存
f.isatty() #文件是交互終端=True
f.truncate([size]) #截取文件大小為size
f.fileno() #返回一個整數(shù)文件描述符
f.next #返回下一行或StopIteration
---------------------------------------------------------------
1.4.實例
# 實例1:
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
# 實例2:
filename=r"C:\somefile.txt"
f = open(filename)while True:str_text = f.read(); #f.readline();f.readlines():#運用迭代否則占用太多的內(nèi)存
if not str_text:f.closebreak
def process(string):print( "Processing: ", string)process(str_text)===============================================================================
2.上下文管理# with應(yīng)用
with open(filename) as f:pass
# 等價于:
try:f = open('/path/to/file', 'r')print(f.read())
finally:if f:f.close()===============================================================================
3.迭代# 1)文件迭代器
f = open(filename)
for line in f:process(line)
f.close()# 2)使用fileinput實現(xiàn)懶惰行迭代
import fileinputdef process(string):print( "Processing: ", string)for line in fileinput.input(filename):print(line.strip()) # 把末尾的'\n'刪掉
process(line)===============================================================================4.綜合實例:#計算文件行數(shù)
#方法1:計算文件行數(shù)
def fileline_n(filename):import os#os.path.exists(filename) #文件及文件夾存在
if (not os.path.isfile(filename)):return 'not exit'+filenamen=0
with open(filename,'r') as file:for line in file: n+=1
return nfilename=r'c:\file_tcy1.txt'
print(fileline_n(filename))# ******************************************************************
#方法2:計算文件行數(shù)
def fileline_n1(filename):import os#os.path.exists(filename) #文件及文件夾存在
if (not os.path.isfile(filename)):return 'not exit'+filenamen=0
with open(filename,'r') as file:while True:buffer = file.read(1024 * 8192)if not buffer:break
n+= buffer.count('\n')return n
=================================================================================
二進制文件讀寫 2018/6/15===============================================================================
1.說明:
# 1)Windows ASCII文件行尾自動添加行結(jié)束符
# 2)文本文件沒用b模式只允許從文件頭計算相對位置
# 3)讀寫復(fù)雜二進制數(shù)據(jù)格式最好使用該struct 模塊。
# 4)規(guī)則數(shù)據(jù)(如整數(shù)或浮點數(shù)的同類列表)使用該array模塊。===============================================================================
2.1.一般方式:#二進制文件讀寫f = open('/tmp/workfile', 'rb+')f.write(b'0123456789abcdef')#16
f.seek(5) # Go to the 6th byte in the file
f.read(1) #b'5'
f.seek(=3, 2) # Go to the 3rd byte before the end #13
f.read(1) #b'd'
f.readline() 2.2.struct 方式:#二進制文件讀寫
# 獲取一個包含二進制數(shù)據(jù)(通常是數(shù)字)的字符串并將其轉(zhuǎn)換為Python對象; 反之亦然。#讀取兩個2字節(jié)整數(shù)和一個大端格式的4字節(jié)整數(shù):
import struct
with open(filename, "rb") as f:s = f.read(8) #b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進制字節(jié) x, y, z = struct.unpack(">hhl", s)說明:字符串中'>'強制大端數(shù)據(jù); 字母'h'讀取一個“短整數(shù)”(2個字節(jié))'l'從字符串中讀取一個長整數(shù)”(4個字節(jié))。===============================================================================
?
?
| 附錄: | 文件讀寫模式類型 |
| r | 文件讀(默認) |
| r+??? | 文件讀寫 |
| rU或Ua | 文件讀(提供通用換行符支持) |
| rb??? | 文件讀(二進制) |
| rb+??? | 文件讀寫(二進制) |
| w???? | 文件寫(存在清空,無創(chuàng)建) |
| w+??? | 文件讀寫(存在清空,無創(chuàng)建) |
| wb??? | 文件寫(二進制w) |
| wb+??? | 文件讀寫(二進制+w) |
| a???? | 文件讀追加(從eof開始追加到文件末尾;無創(chuàng)建) |
| a+??? | 讀寫模式 (參見 a ) 文件指針移到文件尾 |
| ab??? | 二進制追加模式(參見 a ) |
| ab+??? | 二進制讀寫模式打開 (參見 a+ ) |
總結(jié)
以上是生活随笔為你收集整理的python 学习汇总1:文件读写 tcy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。