Python中os模塊的使用及文件對象的讀寫詳解
os模塊和os.path() 模塊
#導(dǎo)入模塊 import os print(os.name)#輸出字符串表示正在使用的平臺。如果是window,則用'nt'表示。如果是linux/unix,則輸出'posix' print(os.getcwd())#函數(shù)得到當(dāng)前工作目錄,即當(dāng)前python腳本工作的目錄路徑 print(os.listdir())#返回指定目錄下的所有文件和文件夾目錄名(文件夾下的內(nèi)容不顯示)。此時輸出的是os.getcwd()路徑下的內(nèi)容 print(os.listdir('C:\人機(jī)交互')) #此時輸出的是C:\人機(jī)交互 目錄下的內(nèi)容 os.chdir('C:\人機(jī)交互')#切換目錄。os.chdir() 方法用于改變當(dāng)前工作目錄到指定的路徑。 print(os.getcwd()) #切換目錄后,再次查看
os.path() 模塊
#os.path.split(path) 把路徑分割成 dirname 和 basename,返回一個元組 print(os.path.split('C:\\Users\\。\\Python基礎(chǔ)學(xué)習(xí)')) #os.path.exists(path) 如果路徑 path 存在,返回 True;如果路徑 path 不存在,返回 False。 print(os.path.exists('C:\\Users\。\Python基礎(chǔ)學(xué)習(xí)'))
相對路徑和絕對路徑
#要打開"C:\人機(jī)交互\test.txt"。 #此時的工作目錄為:C:\Users\。\Python基礎(chǔ)學(xué)習(xí) print(os.getcwd()) f = open('test.txt') #這種寫法是相對路徑
由上面的運(yùn)行結(jié)果可以看出,報(bào)錯。
因?yàn)楫?dāng)前的工作路徑為C:\Users\。\Python基礎(chǔ)學(xué)習(xí)。
而這個路徑下沒有test.txt。(即當(dāng)前工作目錄不是文件所在目錄,不能用相對路徑)寫成絕對路徑則不會報(bào)錯。
如下代碼:
#要打開"C:\人機(jī)交互\test.txt"。 #此時的工作目錄為:C:\Users\。\Python基礎(chǔ)學(xué)習(xí) print(os.getcwd()) f = open(r"C:\人機(jī)交互\test.txt") #絕對路徑
若想要寫成相對路徑,則要切換工作目錄。如下:
#要打開"C:\人機(jī)交互\test.txt"。 os.chdir("C:\人機(jī)交互") #在申明了目錄之后,就可以直接寫文件名了。 f = open('test.txt') #相對路徑 print(f.read())
文件路徑的書寫格式
.csv就是帶格式的.txt文本文件,又叫逗號分隔符文件。.csv可以直接用excel打開,也可以用記事本打開
#路徑的書寫格式 #使用單個斜杠:/ path1 = 'C:/python數(shù)據(jù)分析/text.txt' #單引號或雙引號均可 #使用兩個反斜杠:\\。第一個斜杠代表轉(zhuǎn)義字符 path2 = "C:\\python數(shù)據(jù)分析\\text.txt" #使用r,r用于防止轉(zhuǎn)義字符 path3 = r"C:\python數(shù)據(jù)分析\text.txt" ''' 若只用但個反斜杠\,會發(fā)現(xiàn)有時候行,有時候不行。因?yàn)榉葱备躙可以轉(zhuǎn)義很多字符,以便在字符串中可以使用一些特殊字符 比如\n表示換行,\t表示制表符。 所以最好不要使用單個反斜杠 ''' print(path1,type(path1)) print(path2) print(path3)
print('\p')#未轉(zhuǎn)義,以普通字符輸出 print('\t')#轉(zhuǎn)義字符,\t代表制表符
文件對象 python file文件鏈接
file 對象使用 open 函數(shù)來創(chuàng)建,下面列出了 file 對象常用的函數(shù): 注意:open()函數(shù)的用法見(3)
file.close()關(guān)閉文件。關(guān)閉后文件不能再進(jìn)行讀寫操作。
file.flush()刷新文件內(nèi)部緩沖,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)立刻寫入文件, 而不是被動的等待輸出緩沖區(qū)寫入。
file.fileno()返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上。
file.isatty()如果文件連接到一個終端設(shè)備返回 True,否則返回 False。
file.next()返回文件下一行。
file.read([size])從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。
file.readline([size])讀取整行,包括 “\n” 字符。
file.readlines([sizeint])讀取所有行并返回列表,若給定sizeint>0,則是設(shè)置一次讀多少字節(jié),這是為了減輕讀取壓力。
file.seek(offset[, whence])設(shè)置文件當(dāng)前位置,用于移動文件讀取指針到指定位置。
file.tell()返回文件當(dāng)前位置。
file.truncate([size])截取文件,截取的字節(jié)通過size指定,默認(rèn)為當(dāng)前文件位置。
file.write(str)將字符串寫入文件,返回的是寫入的字符長度。
file.writelines(sequence)向文件寫入一個序列字符串列表,如果需要換行則要自己加入每行的換行符
打開文件,open語句
Python open() 方法用于打開一個文件,并創(chuàng)建返回文件對象,在對文件進(jìn)行處理過程都需要使用到這個函數(shù),如果該文件無法被打開,會拋出 OSError。 如:f = open(file, mode=‘r’) f是一個文件對象
注意:使用 open() 方法一定要保證關(guān)閉文件對象,即調(diào)用 close() 方法。
open() 函數(shù)常用形式是接收兩個參數(shù):文件名(file)和模式(mode)。open(file, mode=‘r’)
完整的語法格式為:open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 參數(shù)說明:file: 必需,文件路徑(相對或者絕對路徑)、mode: 可選,文件打開模式。 buffering: 設(shè)置緩沖、encoding: 一般使用utf8、errors: 報(bào)錯級別、newline: 區(qū)分換行符 closefd: 傳入的file參數(shù)類型
注意:用w或a模式打開文件的話,如果文件不存在,那么就自動創(chuàng)建。 此外,用w模式打開一個已經(jīng)存在的文件時,原有文件的內(nèi)容會被清空,因?yàn)橐婚_始文件的操作的標(biāo)記是在文件的開頭的,這時候進(jìn)行寫操作,無疑會把原有的內(nèi)容給抹掉。
#讀取文件:open語句 #python open() 函數(shù)用于打開一個文件,創(chuàng)建一個 file 對象, #open(file, mode='r', encoding=None)即:open('路徑','模式',encoding='編碼') #模式: r(讀取文件,默認(rèn)),w(寫入),rw(讀取寫入),a(追加) f = open(path1) print(type(f)) print(f)
查看文件的編碼方式
encoding設(shè)置方法 查看文件的編碼方式:以.csv或者.txt為例,先用記事本打開該文件,然后點(diǎn)擊另存為,在彈出的另存為對話框中,你就可以看到文件的編碼格式
如下圖,可以看出IRIS.csv的編碼方式為UTF-8
encoding設(shè)置: 當(dāng)文件編碼方式為ANSI時,encoding=‘gbk’ 當(dāng)編碼方式為UTF-8時,encoding=‘utf8’
讀取文件fileObject.read(),以及f.readline()、f.readlines()
fileObject.read(size=-1); size : 從文件中讀取的字符數(shù),如果未給定或?yàn)樨?fù)則讀取所有。
注意:讀取后,光標(biāo)會停留在讀取末尾,再次運(yùn)行.read()之后,由于光標(biāo)位于末尾,再次讀取輸出為空
#fileObject.read(size=-1); size -- 從文件中讀取的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。 #讀取后,光標(biāo)會停留在讀取末尾,再次運(yùn)行.read()之后,由于光標(biāo)位于末尾,再次讀取輸出為空 print('首次讀取') print(f.read()) print('二次讀取') print(f.read()) print('down')
#現(xiàn)在用f.seek()來移動光標(biāo) f.seek(0) print(f.read(2)) print(f.read(3)) f.seek(0)
f.readline()和f.readlines()
f.readline() 方法用于從文件讀取整行,包括 “\n” 字符。一次性讀取一行 f.readline(n) #讀取該行的前n個字符 f.readlines() 方法用于讀取所有行(直到結(jié)束符 EOF)并返回列表,該列表可以由 Python 的 for… in … 結(jié)構(gòu)進(jìn)行處理。也會讀取\n。 f.readlines()返回列表,包含所有的行。無參數(shù)。
文件內(nèi)容如下:
path = r"C:\python數(shù)據(jù)分析\text1.txt" f = open(path,encoding='utf8') f.seek(0) print(f.readline()) #因?yàn)闀x取換行符\n,所以輸出的結(jié)果中一行空白 print(f.readline(4)) print(f.readline(4)) print(f.readline())
f.seek(0) for line in f.readlines(): print(type(line),line)
file.seek(offset[, whence])
設(shè)置文件當(dāng)前位置
seek() 方法用于移動文件讀取指針到指定位置。 fileObject.seek(offset[, whence=0])
參數(shù):offset – 開始的偏移量,也就是代表需要移動偏移的字節(jié)數(shù)
whence:可選,默認(rèn)值為 0。給offset參數(shù)一個定義,表示要從哪個位置開始偏移;
0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起,2代表從文件末尾算起。
返回值:如果操作成功,則返回新的文件位置,如果操作失敗,則函數(shù)返回 -1。
#現(xiàn)在用f.seek()來移動光標(biāo) #現(xiàn)在用f.seek()來移動光標(biāo) print('首次讀取') print(f.read()) print('二次讀取') print(type(f.seek(0))) print(f.read()) print('down') f.seek(0)
文件的寫入f.write(str)、f.writelines(seq)
write(str) 方法用于向文件中寫入指定字符串。 在文件關(guān)閉前或緩沖區(qū)刷新前,字符串內(nèi)容存儲在緩沖區(qū)中,這時你在文件中是看不到寫入的內(nèi)容的。 語法:參數(shù):str 要寫入文件的字符串。返回值:返回的是寫入的字符長度。(Returns the number of characters written (which is always equal to the length of the string).)
注意:如果文件打開模式帶 b,那寫入文件內(nèi)容時,str (參數(shù))要用 encode 方法轉(zhuǎn)為 bytes 形式,否則報(bào)錯:TypeError: a bytes-like object is required, not ‘str’。
import os path = r"C:\python數(shù)據(jù)分析\text3.txt" f = open(path,'w',encoding='utf8') print(f.write('你好,世界!')) print(f.write('hello world!')) f.close()
writelines() 方法用于向文件中寫入一序列的字符串。
這一序列字符串可以是由迭代對象產(chǎn)生的,如一個字符串列表。
換行需要制定換行符 \n。
語法如下:fileObject.writelines( [str]) 參數(shù):str – 要寫入文件的字符串序列。
返回值:該方法沒有返回值。
path = r"C:\python數(shù)據(jù)分析\text2.txt" f = open(path,'w',encoding='utf8') lst = ['hello','wordl','你好呀'] f.writelines(lst) f.close() #f.writelines(lst)依次把元素寫入,但沒有加換行符。 #如果要想加上換行符,則需要在每個元素后面加上\n
打開text2.txt。文件內(nèi)容如下:
path = r"C:\python數(shù)據(jù)分析\text2.txt" f = open(path,'w',encoding='utf8') lst = ['hello','wordl','你好呀'] for i in range(len(lst)): lst[i] = lst[i] + '\n' print(lst) f.writelines(lst) f.close() #f.writelines(lst)依次把元素寫入,但沒有加換行符。 #如果要想加上換行符,則需要在每個元素后面加上\n
關(guān)閉文件f.close()
f.close() #print(f.read()) #關(guān)閉后無法讀取
到此這篇關(guān)于Python中os模塊的使用及文件對象的讀寫詳解的文章就介紹到這了,更多相關(guān)Python中os模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用yarl實(shí)現(xiàn)輕松操作url
在諸如網(wǎng)絡(luò)爬蟲、web應(yīng)用開發(fā)等場景中,我們需要利用Python完成大量的url解析、生成等操作。本文為大家介紹了Pythonyarl操作url的方法,需要的可以了解一下2022-10-10Python爬取數(shù)據(jù)并寫入MySQL數(shù)據(jù)庫的實(shí)例
今天小編就為大家分享一篇Python爬取數(shù)據(jù)并寫入MySQL數(shù)據(jù)庫的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06理解生產(chǎn)者消費(fèi)者模型及在Python編程中的運(yùn)用實(shí)例
生產(chǎn)者消費(fèi)者模型一般用于體現(xiàn)程序的多線程并發(fā)性,Python的多線程雖然受到GIL控制,但依然可以構(gòu)建隊(duì)列來簡單體現(xiàn)出模型的思路,這里我們就來共同理解生產(chǎn)者消費(fèi)者模型及在Python編程中的運(yùn)用實(shí)例:2016-06-06Python對Excel進(jìn)行處理的實(shí)操指南
這篇文章主要給大家介紹了關(guān)于Python對Excel進(jìn)行處理的實(shí)操指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python中tkinter實(shí)現(xiàn)GUI程序三個實(shí)例教程
Python提供了多個GUI庫,使開發(fā)人員能夠輕松創(chuàng)建各種交互式界面,這篇文章主要給大家介紹了關(guān)于python中tkinter實(shí)現(xiàn)GUI程序的三個實(shí)例教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05使用Python創(chuàng)建websocket服務(wù)端并給出不同客戶端的請求
本文主要介紹了使用Python創(chuàng)建websocket服務(wù)端并給出不同客戶端的請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01