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