py文件输出结果_24python中编码格式和文件操作
點(diǎn)擊藍(lán)色“潭時(shí)錄”關(guān)注我丫
每天和小潭一起快樂(lè)的學(xué)習(xí)~
????你好,我是在學(xué)python的小潭。通過(guò)昨天的文章23-python中第三方模塊的安裝和使用我們熟悉了python中通過(guò)pip命令安裝第三方模塊的知識(shí),今天我們將學(xué)習(xí)下python中編碼格式和文件的相關(guān)操作知識(shí)。
(一)編碼格式介紹
? ? 常見(jiàn)的字符編碼格式
python的解釋器使用的是Unicode(內(nèi)存)
.py文件在磁盤(pán)上使用UTF-8存儲(chǔ)(外存)
可在python文件中頭部添加#encoding=gbk來(lái)指定.py使用gbk的編碼格式。
(二)文件的讀寫(xiě)原理
????文件的讀寫(xiě)又被稱(chēng)為'IO操作',操作流程和操作原理如下圖所示。
(三)文件讀寫(xiě)操作
內(nèi)置函數(shù)open()創(chuàng)建文件對(duì)象
語(yǔ)法規(guī)則
file表示被創(chuàng)建的文件對(duì)象,open()為創(chuàng)建文件對(duì)象的函數(shù),filename為要?jiǎng)?chuàng)建或打開(kāi)的文件名稱(chēng),mode為打開(kāi)模式[可選,默認(rèn)為只讀],encoding為文件的編碼格式[可選,默認(rèn)文本文件中字符的編碼格式為gbk]。
file?=?open(filename?[,mode, encoding])代碼示例[同級(jí)目錄下準(zhǔn)備a.txt]:
? ? ? ? ? ? ? ?
file = open('a.txt', mode='r', encoding='UTF-8')print(file.readlines())file.close()結(jié)果輸出:
['小潭學(xué)python'](四)文件對(duì)象常用的方法
????文件的類(lèi)型,按照文件中數(shù)據(jù)的組織形式,可以分為以下兩大類(lèi)
文本文件,存儲(chǔ)普通字符文本,默認(rèn)為unicode字符集,可以使用記事本程序打開(kāi)
二進(jìn)制文件,把數(shù)據(jù)內(nèi)容用字節(jié)進(jìn)行存儲(chǔ),無(wú)法使用記事本打開(kāi),需要使用特定的軟件打開(kāi),例如mp4文件,jpg圖片或doc文檔等。
1.文件對(duì)象常用的打開(kāi)模式:
| 打開(kāi)模式 | 描述 |
| r | 以只讀模式打開(kāi)文件,文件的指針將會(huì)放在文件的開(kāi)頭 |
| w | 以只寫(xiě)模式打開(kāi)文件,如果文件不存在則創(chuàng)建, 如果文件存在,則覆蓋原有內(nèi)容,文件指針在文件開(kāi)頭 |
| a | 以追加模式打開(kāi)文件,如果文件不存在則創(chuàng)建,文件指針在文件開(kāi)頭, 如果文件存在,則在文件末尾追加內(nèi)容,文件指針在原文件末尾 |
| b | 以二進(jìn)制模式打開(kāi)文件,不能單獨(dú)使用,需要和其他模式一起使用,如rb,wb等 |
| + | 以讀寫(xiě)模式打開(kāi)文件,不能單獨(dú)使用,需要和其他模式一起使用,如a+ |
代碼示例:
# w模式file = open('b.txt', 'w')file.write('小潭')file.close()# a模式file = open('b.txt', 'w')file.write('在學(xué)python')file.close()# rb模式src_file = open('b.txt', 'rb')target_file = open('copyb.txt', 'wb')target_file.write(src_file.read())target_file.close()src_file.close()結(jié)果輸出:
Process finished with exit code 0? ?? ?
2.文件對(duì)象常用的方法:
| 方法名 | 描述 |
| read([size]) | 從文件中讀取size個(gè)字節(jié)或字符的內(nèi)容返回。 若省略[size]參數(shù),則讀取到文件末尾,即一次讀取文件所有內(nèi)容 |
| readline() | 從文本文件中讀取一行內(nèi)容 |
| readlines() | 把文本文件中每一行都作為獨(dú)立的字符串對(duì)象,并將這些對(duì)象放入到列表返回 |
| write(str) | 將字符串str內(nèi)容寫(xiě)入文件 |
| writelines(s_list) | 將字符串列表s_list寫(xiě)入文本文件,不添加換行符 |
| seek(offset [,whence]) | 把文件指針移動(dòng)到新的位置,offset表示相對(duì)于whence的位置。 offset:為正,往文件結(jié)束方向移動(dòng),為負(fù)則往文件開(kāi)始方向移動(dòng) whence:不同的值代表不同含義,0表示從文件頭開(kāi)始計(jì)算(默認(rèn)值),1表示從當(dāng)前位置開(kāi)始計(jì)算,2表示從文件末尾開(kāi)始計(jì)算 |
| tell() | 返回文件指針的當(dāng)前位置 |
| flush() | 把緩沖區(qū)的內(nèi)容寫(xiě)入文件,但不關(guān)閉文件 |
| close() | 把緩沖區(qū)的內(nèi)容寫(xiě)入文件,同時(shí)關(guān)閉文件,釋放文件對(duì)象相關(guān)資源 |
代碼示例:
file = open('c.txt', 'a+')print(file.read(2))lst = ['javascript', 'c']file.writelines(lst)file.seek(2)print(file.read())print(file.tell())file.write('hello')file.flush()file.write('world')file.close()結(jié)果輸出:
llojavac++goandpythonjavascriptchelloworldjavascriptc55原始文件:
運(yùn)行后結(jié)果:
(五)with語(yǔ)句
??? with語(yǔ)句可以自動(dòng)管理上下文資源,不論什么原因跳出with語(yǔ)句塊,都能確保文件正確關(guān)閉,同時(shí)釋放資源。
語(yǔ)法格式:
open('log.txt', 'r')為上下文表達(dá)式[open()實(shí)現(xiàn)了__enter__()方法和__exit__()方法,遵守了上下文管理協(xié)議],對(duì)應(yīng)示例對(duì)象被稱(chēng)為上下文管理器,同時(shí)創(chuàng)建一個(gè)運(yùn)行時(shí)上下文,自動(dòng)調(diào)用__enter__()方法,并將返回值賦值給src_file[可選,上下文管理器對(duì)象的引用],離開(kāi)運(yùn)行時(shí)上下文,程序?qū)⒆詣?dòng)調(diào)用上下文管理器的特殊方法__exit__()。
with?open('log.txt',?'r')?as?src_file:????src_file.read()??#?with語(yǔ)句體代碼示例1:
class MyContentMgr: # 實(shí)現(xiàn)了__enter__()方法和__exit__()方法,遵守了上下文管理協(xié)議 def __enter__(self): print('enter方法被調(diào)用執(zhí)行') return self def __exit__(self, exc_type, exc_val, exc_tb): print('exit方法被調(diào)用執(zhí)行') def show(self): print('show方法被調(diào)用執(zhí)行', 1/0) # 寫(xiě)入異常with MyContentMgr() as file: # 相當(dāng)于file = MyContentMgr() file.show()結(jié)果輸出[存在異常,exit方法仍被執(zhí)行]:
Traceback (most recent call last): file.show() print('show方法被調(diào)用執(zhí)行', 1/0) # 寫(xiě)入異常ZeroDivisionError: division by zeroenter方法被調(diào)用執(zhí)行exit方法被調(diào)用執(zhí)行代碼示例2:
print(type(open('b.txt', 'r')))with open('b.txt', 'r') as src_file: print(src_file.read())結(jié)果輸出:
<class '_io.TextIOWrapper'>在學(xué)python小潭(六)目錄操作
? ? os模塊是python內(nèi)置的與操作系統(tǒng)功能和文件系統(tǒng)相關(guān)的模塊,該模塊中的語(yǔ)句執(zhí)行結(jié)果通常與操作系統(tǒng)有關(guān),在不同的操作系統(tǒng)上運(yùn)行,得到的結(jié)果可能不一樣。
??? os模塊與os.path模塊用于對(duì)目錄或文件進(jìn)行操作。
代碼格式:
import osos.system('notepad.exe')os.system('calc.exe')# 直接調(diào)用可執(zhí)行文件os.startfile('C:\\Program Files\\Tencent\WeChat\WeChat.ext')1.os模塊操作目錄相關(guān)的函數(shù):
| 函數(shù) | 描述 |
| getcwd() | 返回當(dāng)前的工作目錄 |
| listdir(path) | 返回指定路徑下的文件和目錄信息 |
| mkdir(path [, mode]) | 創(chuàng)建目錄 |
| makedirs(path1/path2...[, mode]) | 創(chuàng)建多級(jí)目錄 |
| rmdir(path) | 刪除目錄 |
| removedirs(path1/path2...) | 刪除多級(jí)目錄 |
| chdir(path) | 將path設(shè)置為當(dāng)前工作目錄 |
代碼示例:
import os# 打印目錄路徑print(os.getcwd())# 創(chuàng)建目錄os.mkdir('newdir')os.makedirs('A/B/C')# 列舉目錄內(nèi)容lst = os.listdir('../cap15')print(lst)# 刪除目錄os.rmdir('newdir')os.removedirs('A/B/C')# 指定目錄os.chdir('../')print(os.getcwd())結(jié)果輸出:
D:\Python\cap15['A', 'a.txt', 'b.txt', 'c.txt', 'copyb.txt', 'demo1.py', 'demo2.py', 'demo3.py', 'demo4.py', 'demo5.py', 'demo6.py', 'demo7.py', 'newdir']D:\Python2.os.path模塊操作目錄相關(guān)函數(shù):
補(bǔ)充,可使用os模塊中的walk()函數(shù)獲取整個(gè)目錄結(jié)構(gòu)。
| 函數(shù) | 描述 |
| abspath(path) | 用于獲取文件或目錄的絕對(duì)路徑 |
| exists(path) | 用于判斷文件或目錄是否存在, 如果存在返回True,否則返回False |
| join(path, name) | 將目錄與目錄或文件拼接起來(lái) |
| splitext() | 分離文件和擴(kuò)展名 |
| basename(path) | 從一個(gè)目錄中提取文件名 |
| dirname(path) | 從一個(gè)路徑中提取文件路徑,不包括文件名 |
| isdir(path) | 用于判斷是否為路徑 |
代碼示例1:
import os.pathprint(os.path.abspath('demo8.py'))print(os.path.exists('demo1.py'), os.path.exists('demo9.py'))print(os.path.join('D:\\Python', 'demo8.py'))print(os.path.split('D:\\Python\\cap15\\demo8.py'))print(os.path.splitext('demo8.py'))print(os.path.basename('D:\\Python\\cap15\\demo8.py'))print(os.path.dirname('D:\\Python\\cap15\\demo8.py'))print(os.path.isdir('D:\\Python\\cap15\\demo8.py'))結(jié)果輸出:
D:\Python\cap15\demo8.pyTrue FalseD:\Python\demo8.py('D:\\Python\\cap15', 'demo8.py')('demo8', '.py')demo8.pyD:\Python\cap15False代碼示例2:
# 使用os.walk()分層級(jí)遍歷目錄import ospath = os.getcwd()lst_files = os.walk(path)for dirpath, dirname, filename in lst_files: print(dirpath) print(dirname) print(filename) print('----------------') # 使用os.walk()分層級(jí)遍歷目錄并輸出文件路徑import ospath = os.getcwd()lst_files = os.walk(path)for?dirpath,?dirname,?filename?in?lst_files: for dir in dirname: print(os.path.join(dirpath, dir)) for file in filename: print(os.path.join(dirpath, file)) print('----------------')結(jié)果輸出:
# 使用os.walk()分層級(jí)遍歷目錄D:\Python\cap15['sub']['a.txt', 'b.txt', 'c.txt', 'copyb.txt', 'demo1.py', 'demo2.py', 'demo3.py', 'demo4.py', 'demo5.py', 'demo6.py', 'demo7.py', 'demo8.py', 'demo9.py']----------------D:\Python\cap15\sub['sub1']['1.py']----------------D:\Python\cap15\sub\sub1[]['sub_1.py']----------------# 使用os.walk()分層級(jí)遍歷目錄并輸出文件路徑D:\Python\cap15\subD:\Python\cap15\a.txtD:\Python\cap15\b.txtD:\Python\cap15\c.txtD:\Python\cap15\copyb.txtD:\Python\cap15\demo1.pyD:\Python\cap15\demo2.pyD:\Python\cap15\demo3.pyD:\Python\cap15\demo4.pyD:\Python\cap15\demo5.pyD:\Python\cap15\demo6.pyD:\Python\cap15\demo7.pyD:\Python\cap15\demo8.pyD:\Python\cap15\demo9.py----------------D:\Python\cap15\sub\sub1D:\Python\cap15\sub\1.py----------------D:\Python\cap15\sub\sub1\sub_1.py----------------????以上是python中編碼格式和文件相關(guān)的操作知識(shí)。至此,我們已學(xué)習(xí)了全部的python基礎(chǔ)部分,如果感覺(jué)掌握的還不是很牢固,可以返回01-寫(xiě)在之前,從開(kāi)始再鞏固一遍哦。
????在接下來(lái)的推文中,我們將陸續(xù)進(jìn)入python基礎(chǔ)實(shí)戰(zhàn)部分的學(xué)習(xí),使用已學(xué)到的python基礎(chǔ)知識(shí)進(jìn)行一些小項(xiàng)目的開(kāi)發(fā),敬請(qǐng)期待。
下期預(yù)告:python基礎(chǔ)實(shí)戰(zhàn)——簡(jiǎn)易版學(xué)生信息管理系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的py文件输出结果_24python中编码格式和文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: go和python性能对比_Go和Pyt
- 下一篇: python中exception类的_P