目錄
⼀、⽂件處理
⽂件的處理包括讀⽂件和寫⽂件,讀寫⽂件就是請求操作系統打開⼀個⽂件對象,然後,通過操作系統提供的接⼝從這個⽂件對象中讀取數據(讀⽂件),或者把數據寫⼊這個⽂件對象(寫⽂件)。
1 ⽂件讀取
⽂件讀取可分爲以下步驟:
- 打開⽂件
- 讀取⽂件內容
- 關閉⽂件
打開⽂件要使⽤open內建函數:
open(file [, mode='r', encoding=None, errors=None])
參數說明:
- file:⽂件路徑,可以是相對路徑和絕對路徑
- mode:⽂件打開模式
- encodeing: ⽂件編碼⽅式,不⽤於⼆進制⽂件,⼀般是utf-8,gbk
- errors:指定如何處理編碼和解碼錯誤 ,適⽤於⽂本⽂件
- 返回值:⼀個可迭代的⽂件對象
注意:⼆進制⽂件⼀般⽤於視頻、⾳頻、圖⽚
讀取⽂件常⽤函數:
# 打開文件
fp = open('qfile.txt','r',encoding='utf-8')
# 讀取文件全部內容
# content = fp.read()
# print(content)
#讀取指定字符數,包括行尾的換行符\n
# print(fp.read(5))
# 讀取一行
# print(fp.readline(6)) #讀取指定字符數
# print(fp.readline()) #讀取⼀整⾏,直到碰到⼀個\n
# 讀取所有行,返回列表
print(fp.readlines())
#關閉文件
fp.close()
'''
由於⽂件讀寫時都有可能產⽣IOError,⼀旦出錯,後⾯的f.close()就不會調⽤。
所以,爲了保證⽆論是否出錯都能正確地關閉⽂件,我們可以使⽤try ...
finally來實現:
'''
try:
fp = open('qfile.txt','r',encoding='utf-8')
print(fp.readlines())
finally:
fp.close()
'''
可以簡寫爲:
with語句會⾃動調⽤close⽅法關閉⽂件
'''
with open('qfile.txt','r',encoding='utf-8') as fp:
print(fp.readline())
'''
fread()和freadlines()會⼀次讀⼊⽂件全部內容,如果⽂件太⼤,會直接耗盡內存的,
因爲⽂件對象可迭代,所以可以⽤for循環遍歷⽂件讀取
'''
with open('qfile.txt','r',encoding='utf-8') as fp:
for line in fp:
print(line.strip()) #注意⽆論是read、 readline、 readlines都會讀⼊⾏末的\n,所以需要⼿動剔除\n
# print(line)
2 寫⽂件
'''
寫文件
'''
path = 'file11.txt'
# 1.打開文件
f = open(path,'w',encoding='utf-8')
'''
2.寫⼊內容,將內容寫⼊到緩衝區
不會⾃動換⾏,需要換⾏的話,需要在字符串末尾添加換⾏符
'''
f.write('Whatever is worth doing is worth doing well該⾏很驕傲很關鍵\n')
f.write('Whatever is worth doing is worth doing well該⾏很驕傲很關鍵\n')
# 3.刷新緩衝區【加速數據的流動,保證緩衝區的流暢】
f.flush()
# 4. 關閉文件 關閉文件也會刷新緩衝區
f.close()
# 簡寫⽅式:可以不⽤⼿動調⽤close
with open(path,'w',encoding='utf-8') as f1:
f1.write('Whatever is worth doing is worth doing well')
3 移動⽂件指針
⽂件是順序向後讀寫的,如果想要移動⽂件指針,可以使⽤seek⽅法:
file_obj.seek(offset,whence=0)
功能:移動⽂件指針
參數: offset 是偏移量,正數表示從⽂件開頭向⽂件末尾移動,負數相反。
whence : ⽂件指針的位置,可選參數,值可以是
- SEEK_SET or 0 表示⽂件開頭位置,是默認值
- SEEK_CUR or 1 表示當前位置(不能使⽤)
- SEEK_END or 2 ⽂件末尾位置(不能使⽤)
返回值:⽆
#1.txt內容: hello world
with open('file11.txt','r',encoding='utf-8') as fp:
fp.seek(5) #移動到hello後的空格位置
print(fp.read(3)) #wo
fp.seek(0) #移動到開頭
print(fp.read(5)) #hello
print(fp.tell()) #tell()顯示當前指針位置
⼆、 os模塊
1. os模塊
需要引⼊os模塊
import os