⼆、os模組
⽂件的處理包括讀⽂件和寫⽂件,讀寫⽂件就是請求作業系統開啟⼀個⽂件物件,然後,通過作業系統提供的接⼝從這個⽂件物件中讀取資料(讀⽂件),或者把資料寫⼊這個⽂件物件(寫⽂件)。
⽂件讀取可分為以下步驟:
mode解釋r
唯讀w只寫,寫之前會清空⽂件的內容,如果⽂件不存在,會建立新⽂件
a追加的⽅式,在原本內容中繼續寫,如果⽂件不存在,則會建立新⽂件
r+可讀可寫
w+開啟⼀個⽂件⽤於讀寫。如果該⽂件已存在則將其覆蓋。如果該⽂件不存在,建立新⽂件。
a+開啟⼀個⽂件⽤於讀寫。如果該⽂件已存在,⽂件指標將會放在⽂件的結尾。⽂件開啟時會是追加模式。如果該⽂件不存在,建立新⽂件⽤於讀寫。
brb、wb、ab、rb+、wb+、ab+意義和上⾯⼀樣,⽤於⼆進製⽂件操作
函式解釋
read([size])
讀取⽂件(讀取size字元,預設讀取全部)
readline([size])
讀取⼀⾏,如果指定size,將讀⼊指定的字元數
readlines()
把⽂件內容按⾏全部讀⼊,返回⼀個包含所有⾏的列表
#開啟⽂件
fp =
open
('qfile.txt'
,'r'
,encoding=
'utf-8'
)#讀取⽂件全部內容
#content = fp.read()
#print(content)
#讀取指定字元數,包括⾏尾的換⾏符\n
# print(fp.read(20))
#讀取⼀⾏
# print(fp.readline(5)) #讀取指定字元數
# 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
path =
"file11.txt"
#1.開啟⽂件
f =open
(path,
"w",encoding=
"utf-8"
)#2.寫⼊內容,將內容寫⼊到緩衝區
#不會⾃動換⾏,需要換⾏的話,需要在字串末尾新增換⾏符
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:
f.write("whatever is worth doing is worth doing well該⾏很驕傲很關
鍵")
⽂件是順序向後讀寫的,如果想要移動⽂件指標,可以使⽤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
('1.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模組
函式名函式值
os.name
獲取當前的作業系統的型別nt->windows posix->unix 後者linux
os.environ
獲取作業系統中的環境變數
os.environ.get(「path」)
獲取path的環境變數
os.curdir
獲取當前的⽬錄
os.getcwd()
獲取當前的⼯作⽬錄
os.listdir() **
以列表的形式 返回當前⽬錄的⽂件
os.mkdir()
建立⽬錄
os.rmdir()
刪除⽬錄
os.rename(old,new)
修改⽂件後者⽂件夾的名字
os.remove()
刪除⽂件
os.system(command)
執⾏系統命令
os.walk(path) **
遍歷⽬錄
os.path.join(path1,path2)
將path1和path2拼接成⼀個正常的路徑
os.path.splitext()
獲取⽂件副檔名
os.path.isdir() **
判斷是否是⽬錄
os.path.isfile() **
判斷是否是⽂件
os.path.exists() **
判斷⽂件或者⽬錄是否存在
os.path.getsize() **
獲取⽂件的⼤⼩(位元組)
os.path.dirname()
獲取路徑的⽬錄名
os.path.basename()
獲取路徑的⽂件名
os.path.abspath()
返回⽂件的絕對路徑
os.path.split()
拆分路徑
冥想第二十四天
還有乙個需要提高的地方就是 慢一點,以往自己對成功和只是追求的太急切。一急切就亂了節奏,適當的急切是必要的 放輕鬆全身都是最舒服的狀態。平靜的內心讓自己能面對生活的困難。感謝自己,感謝家人,感謝朋友,感謝一切。不責怪自己,一天比一天進步就好。慢慢來。下午和客戶積極的溝通,全身心的投入,發現一點也不困...
連續總結第二十四天
11.4 康鑫 連續總結第二十四天 今天學習了課本上有關陣列的知識,陣列與指標。1,指標運算包括a,賦值運算 b,算術運算 c,關係運算 d,邏輯運算。2 一維陣列 a 與指標 p 3,二維陣列 b,m行n列 與指標。4,字元陣列 s 與指標 ps 5,指標陣列 完成了課本的例題,通過程式設計實現二...
2017 8 23暑假集訓第二十四天
今天一共a了兩道題 1001.1002 比較簡單的?1001做了一上午 一直在繞一點 當輸入字元m後,要輸入五個數字 用scanf輸入的 但是!卻只寫了四個 d!然後就一直在找bug!找了一上午。我很疑惑,為什麼編譯能過!提交還是莫名其妙的wa!一直在懷疑自己!下午 睡過頭了 來的晚了 1007看了...