python文件流
打開文件
文件的基本方法
叠代文件內容
打開文件
打開文件,可以使用自動導入的模塊io中的函數open。函數open將文件名作為唯一必不可少的參數,並返回一個文件對象。如果只指定一個文件名,則獲得一個可讀取的文件對象。
如果當前目錄中有此文件則可以打開,如果位於其他位置則需要指定完整的路徑,如果指定文件不存在,則如下報錯。
文件模式
如果需要寫入文件,則需要通過指定模式。函數open的參數模式常見有如下:
模式 |
描述 |
‘r‘ |
讀取模式(默認) |
‘w‘ |
寫入模式(文件不存在時創建它) |
‘t‘ |
文本模式(默認,與其他模式結合使用) |
‘x‘ |
獨占寫模式,新建一個文件,如果該文件已存在則會報錯。 |
‘a‘ |
附加模式(在既有文件末尾繼續寫入) |
‘b‘ |
二進制模式(與其他模式結合使用) |
‘+‘ |
打開一個文件進行更新(可讀可寫,與其他模式結合使用) |
默認模式為‘rt‘,讀取時將自動替換其他行尾字符(‘\r‘,‘\r\n‘),寫入時將‘\n‘替換為系統的默認行尾字符(os.linesep)
要打開一個文本文件進行讀寫,可使用‘r+‘,但是會將既有內容刪除,而‘w+‘不會。
文件的基本方法
讀取和寫入
管道重定向輸出
隨機存取
讀取和寫入行
關閉文件
文件最重要的功能就是提供和接收數據。在文本和二進制模式下,基本上分別將str和bytes類用作數據。
讀取和寫入:
使用read讀取數據,默認讀取全部內容。還可以指定參數,然後讀取剩下的全部內容:
管道重定向輸出
將一個命令的標準輸出鏈接到下個命令的標準輸入:
#cat some.txt you are bad boy #cat some.py #!/usr/bin/evn python # 計算sys.stdin中包含多少個單詞的腳本 import sys text = sys.stdin.read() words = text.split() wordcount = len(words) print(wordcount) #cat some.txt | python3 some.py4
隨機存取
可以使用方法seek和tell。
seek(offset,[, whence])將當前位置移到offset(指定字節數)和whence指定的地方(參數whence默認為io.SEEK_SET(0),偏移量是相對於文件開頭的,而io.SEEK_SET(1),相對於當前位置進行移動,io.SEEK_SET(2),相對於文件末尾進行移動)
tell()返回當前位於文件的什麽位置。
對行的讀取和寫入
可以使用方法readline,不指定參數默認讀取一行並返回,指定參數為最多讀取多少個字符。要讀取文件中所有的行,並以列表的方式返回它們,可以使用方法readlines。方法writelines接受一個字符串列表寫入文件中。
# 修改文件
關閉文件
避免鎖定文件以防止修改,避免用完系統可能指定的文件打開配額。
確保文件關閉,可以使用try/finally語句。
try: # 將數據寫入到文件中 finally: file.close() with語句可以讓你打開一個文件並賦值到一個變量,到達該句末尾時,將自動關閉文件,即便出現異常。 with open(‘somefile.txt‘) as somefile do_something(somefile)
叠代文件內容
def process(string): print(‘Processing:‘, string) # 每次叠代一個字符 with open(‘fileone.txt‘) as f: while True: char = f.read(1) if not char: break process(char) #每次叠代一行字符 with open(‘fileone.txt‘) as f: while True: line = f.readline() process(line) #讀取所有內容,使用read with open(‘fileone.txt‘) as f: for char in f.read(): process(char) #使用readlines with open(‘fileone.txt‘) as f: for char in f.readlines(): process(char) # 使用fileinput實現延遲叠代,讀取實際需要文本的部分 import fileinput for line in fileinput.input(‘fileone.txt‘): process(line)
文件叠代器
叠代文件
with open(‘fileone.txt‘) as f:
for line in f:
process(line)
不將文件對象賦給變量叠代文件
for line in open(fileone.txt): process(line)
對叠代器的操作也可以對文件做,如list(open(fileone.txt)):
>>> f = open(‘fileone.txt‘, ‘w‘) >>> print(‘First‘, ‘line‘, file=f) >>> print(‘Second‘, ‘line‘, file=f) >>> f.close() >>> lines = list(open(‘fileone.txt‘)) >>> lines [‘First line\n‘, ‘Second line\n‘]
python文件流