python基礎學習淺學文件

#####################第一部分:::文件的基本操作

讀 r (read) ; 寫 w (write) ; 執行 x ; 追加 a (append)

文件打開的模式:
模式: 描述:
r 以只讀方式打開文件,文件指針默認放在文件開頭,文件不存在則報錯。
r+ 打開一個文件用於讀寫,文件指針默認放在文件開頭,文件不存在則報錯。
w 打開一個文件用於寫入,如果該文件已存在則將其覆蓋,如果不存在,創建新文件。
w+ 打開一個文件用於讀寫,如果該文件已存在則將其覆蓋,如果不存在,創建新文件。
a 打開一個文件用於追加,如果文件已存在,文件指針會放在文件末尾(也就是說,新的內容將會被寫到已有內容之後)如果不存在,創建新文件進行寫入。
a+ 打開一個文件用於讀寫,如果文件已存在,文件指針會放在文件結尾,文件打開時會是追加模式,如果不存在,創建新文件用於讀寫。

其他模式 : rb rb+ wb wb+ ab ab+
加個b的作用:以二進制的格式打開文件(比如操作音頻文件,圖片文件,視頻文件…),進行上述操作。

1.如何打開/關閉一個文件

打開文件:
f = open(flie_path,mode = “r”) #有兩個參數,第一個參數是文件的位置(可以是絕對路徑,也可以是相對路徑),第二個參數是打開的方式,默認r
傳入表示文件路徑的字符串,會返回一個文件對象。

關閉文件:
f.close()
調用給定文件對象的close方法

注意:打開一個文件操作完之後,一定要關閉。

需要知道的小知識點:
(1)windows系統中:
相對路徑:不帶盤符的
絕對路徑:帶盤符的
(2)光標位置:
1.如果讀完了就讀不了了,因爲光標的位置在最後
2.通過seek方法重新調整光標的位置
3.寫完了後,光標位置在最後
例子看看:

f = open(r’C:\my\pycharm_work\ceshi.py’,‘r+’)
f.read()
‘wumou love zhangmou’

f.read() #現在就讀不了了,因爲光標在上一次讀完之後移動到了最後。
‘’

f.seek(0) #把光標位置調整到最前面,那麼光標後面就有內容了
0

f.read() #現在就可以讀到內容了
‘wumou love zhangmou’

f.tell() #可以查看光標的位置
24

f.seek(0)
0

f.tell()
0

拓展:
1.讀取指定大小的內容:
變量名.read() #括號里加要讀的指定的字符串長度,不寫則全讀

2.讀取文件某一行的內容:
變量名.readline()

3.讀取文件多行:
變量名.readlines() #括號內可以指定要讀的行數,不寫則全讀,全讀的話會變成列表的形式。

4.寫入內容:
f.write(變量名)

5.寫入多行:(注意換行需要自己加代碼)
變量名.writelines(變量名)

來個例子看看:

f = open(r’C:\my\pycharm_work\ceshi.py’,‘r+’)
f.read()
‘’

f.writelines(‘wumou \n zhangmou \n haha’)
f.seek(0)
0

f.read()
‘wumouzhangmouzhangmouwumou \n zhangmou \n haha’

f.seek(0)
0

f.readline() #這樣是一下查看一行。
‘wumouzhangmouzhangmouwumou \n’

f.readline()
’ zhangmou \n’

f.seek(0)
0

f.readlines() #這樣是一下查看全部行。
[‘wumouzhangmouzhangmouwumou \n’, ’ zhangmou \n’, ’ haha’]

6.立即刷新緩衝:
變量名.flush() #可以理解爲保存

舉個例子:
文件內容是: wumou

f1 = open(r’C:\my\pycharm_work\ceshi.py’,‘a’)
f1.write(‘shuai’)
5

f2 = open(r’C:\my\pycharm_work\ceshi.py’,‘r’)
f2.read() #會發現現在讀是讀不到剛剛以追加方式寫進入的內容shuai
‘wumou’

f1.flush() #我們立即刷新緩衝,那麼下面就可以讀到了。此處作用相當於在進行文件操作之後進行保存
f2.seek(0)
0

f2.read()
‘wumoushuai’

7.獲取遊標位置:
變量名.tell()

8.調整遊標的位置:
變量名.seek(position)

總結:
持久存儲:保存內存中數據都是易丟失的,只有保存在硬盤中才能持久的存儲,保存在硬盤中的基本方法就是把數據寫入文件中
打開和關閉:在python中文件的打開與關閉變得十分簡單快捷,文件在關閉的時候就會自動保存

#########################第二部分::StringIO與BytesIO

真文件:在關閉文件的時候文件內容不會丟失。
假文件:在關閉文件的時候文件內容會丟失。

(1)StringIO:

import io #創建IO操作:
sio = io.StringIO()

sio.write(‘好好學習,天天向上’) #寫入

print(sio.getvalue()) #可以多次讀取,沒有光標的問題存在
print(sio.getvalue()) #也可以獲取到
sio.close() #關閉
print(sio.getvalue()) #報錯,獲取不到。
# 當創建的StringIO調用 close() 方法時,
# 在內存中的數據會丟失

(2)BytesIO字節流:
BytesIO 和 StringIO 類似,但是BytesIO操作的是Bytes數據,decode解碼

import io
bio = io.BytesIO()
bio.write(b’hsfdhdsf124’) #如果寫入字母或者數字時,注意在引號前面加上b
print(bio.getvalue())

bio.write(‘吳某’.encode()) #如果寫入漢字的話,要進行編碼,默認爲utf-8
print(bio.getvalue().decode()) #那麼如果想獲取的話就要進行解碼,如果不解碼就是二進制形式

注意:
調用close()方法,保存內存中的數據,保證內存中的數據不會丟失。
防止佔用某一個資源。如果不關閉的話,那麼這個IO資源就會被他一直佔用,別人想用就沒法用了。

######################第三部分::上下文管理 with…as
作用:讓python自動執行關閉過程,即調用close()方法。
管理多個文件自動關閉。

首先來看,單個文件操作時:
with open(file_path, mode=‘r’) as f:
# 對f進行一系列操作
# 也可以執行別的操作

#跳出with語句快的時候自動執行f.close()

然後來看,多個文件操作時:
with open(file_path, mode=‘r’) as f1,
open(file_path, mode=‘r’) as f2,
.
.
.
open(file_path, mode=‘r’) as fn:
# 對f進行一系列操作
# 也可以執行別的操作

file.closed 查看文件是否關閉了

#跳出with語句塊的時候自動執行f.close()

最後來看看:
兩個底層方法:enter__和__exit

class Person:
def enter(self): # 進入的時候自動調用
print(‘this is enter’)
return ‘吳某好帥’

def __exit__(self,exc_type,exc_val,exc_tb):    #退出的時候自動調用
    print("this is exit")

#with可以打開類,進行多個方法的管理
a = Person()
with a as f: #with可以管理多個軟件,打開多個軟件。
print(111) #我們打開這個類,就會自動調用__enter__方法,然後進行打印111的操作
print(f) #f就是__enter__的返回值
#結束之後就會自動調用__exit__方法

輸出爲: this is enter
111
吳某好帥
this is exit

#####################第三部分::os模塊
(1)文件訪問編碼:
文件內容:
adafsd
asdfasdfd
sadfdsfds
sdafdsf
吳某
你真帥
hello

例子:::
with open(‘shuju.py’,‘r+’,encoding =‘ASCII’,errors = ‘ignore’) as f:
# 如果非想用ASCII編碼方法打開一個包含中文的文件
#(ASCII只能打開英文和數字,打開中文會報錯因爲解不了中文)
# 那麼就加個errors = ‘ignore’ 這樣就會忽略錯誤,直接跳過中文部分
print(f.read())

輸出爲:
adafsd
asdfasdfd
sadfdsfds
sdafdsf

hello

(2)os模塊 的目錄及文件操作:

#先要導入os模塊
import os

######################第一部分:::os模塊 的目錄及文件操作
#1.顯示當前路徑:os.getcwd()
print(os.getcwd()) #輸出爲:C:\my\pycharm_work

#2.展示當前目錄內容:os.listdir(path)
print(os.listdir(r’C:\my\pycharm_work’)) #輸出爲:[’.idea’,‘陰曆和陽曆轉換.py’]

#3.改變當前路徑: os.chdir(path)
print(os.getcwd()) # 輸出爲:C:\my\pycharm_work
os.chdir(r’C:\my’)
print(os.getcwd()) # 輸出爲:C:\my

#4.創建目錄: os.mkdir(文件名)
os.mkdir(‘a.py’)
print(os.listdir(r’C:\my\pycharm_work’)) # 輸出爲:[’.idea’, ‘a.py’, ‘陰曆和陽曆轉換.py’]

#5.刪除目錄: os.rmdir(文件名)
os.rmdir(‘a.py’)
print(os.listdir(r’C:\my\pycharm_work’)) #輸出爲:[’.idea’,‘陰曆和陽曆轉換.py’]

#6.使用Linux命令: os.system()

#7.刪除文件: os.remove(文件名)

#8.重命名: os.rename(“oldname”,“new”)

################第二部分:::os.path模塊 的路徑操作
#1.路徑拼接: os.path.join(path1,path2….)
a = os.path.join(r’C:\my\python’,r’pycharm_work’) # 注意第二個以及更多的路徑前不能加反斜槓
print(a) # 輸出爲:C:\my\python\pycharm_work

#2.所在目錄 / 父級目錄: os.path.dirname(路徑)

#3.基本短路徑: os.path.basename

#4.絕對路徑: os.path.abspath(路徑)

#5.相對路徑: os.path.relpath(路徑)

#6.資源大小: os.path.getsize(路徑) 獲取字節

#7.資源時間: os.path.getctime(路徑) /創建
#getatime(路徑) / 訪問
#getmtime(路徑) 修改

#8.路徑是否存在: os.path.exists(路徑)

#9.是否是目錄: os.path.isdir()

#10.是否是文件: os.path.isfile()

#11.是否是絕對路徑: os.path.isabs()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章