網站首頁 編程語言 正文
Python可以使用open函數來實現文件的打開,關閉,讀寫操作;
Python3中的open函數定義為:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)其中mode列表為:
'r' #open for reading (default)
'w' #open for writing, truncating the file first
'x' #create a new file and open it for writing,python3新增
'a' #open for writing, appending to the end of the file if it exists
'b' #binary mode
't' #text mode (default),python3新增
'+' #open a disk file for updating (reading and writing)
'U' #universal newline mode (deprecated)
這里我們主要關心一下'r', 'w', 'a', 'r+', 'w+', 'a+', 'x',很多人容易混淆不同模式的讀寫操作
'r'
只讀模式,open函數中mode參數的默認模式,文件不存在的話,報FileNotFoundError(python2是IOError);
文件打開后,初始游標位置為0;
每次讀都是從游標位置開始讀;
如果進行了寫操作,會報如下異常:
io.UnsupportedOperation: not writable
'w'
只寫模式,文件不存在的話,創建文件;文件存在的話,首先清空文件,然后開始寫;
文件打開后,初始游標位置為0;
每次寫都是從游標位置開始寫;
如果進行了讀操作,首先文件也會被清空,會報如下異常:
io.UnsupportedOperation: not readable
'a'
追加模式,文件不存在話,創建文件;文件存在的話,不會清空文件;
文件打開后,初始游標位置為文件結尾;
每次寫都是從結尾開始寫;
如果進行了讀操作,同時報如下異常:
io.UnsupportedOperation: not readable
上面的比較好理解,下面就有點繞了
'r+'
讀寫模式,文件不存在的話,報FileNotFoundError(python2是IOError);
文件打開后,初始游標位置為0;
每次讀寫都是從游標位置開始;但是對于寫操作,類似于替換操作;
看如下代碼:
文件內容為:abcdefg
代碼內容為:
f = open('open_mode.txt', 'r+') f.write('xyz') f.close()
運行代碼后,文件內容變為:xyzdefg
'w+'
只寫模式,文件不存在的話,創建文件;文件存在的話,首先清空文件;
文件打開后,初始游標位置為0;
每次讀寫都是從游標位置開始;寫操作,類似于替換操作;
'a+'
追加模式,文件不存在話,創建文件;文件存在的話,不會清空文件;
文件打開后,初始游標位置為文件結尾;
每次寫都是從結尾開始寫;
讀操作從游標位置開始;
'x'
python3新加
創建文件并寫操作,操作必須是不存在的文件,如果操作的文件已存在,則報錯FileExistsError
不可讀,如果進行了讀操作,同時報如下異常:
io.UnsupportedOperation: not readable
'b'
二進制形式讀寫文件;
寫數據時,寫入的數據類型必須為字符串類型,其他類型必須通過json(就是符合json格式的字符串)寫入
python2與python3對于'b’ mode的行為不同,這和python2與python3的字符串類型有關;事實上,python的字符串類型有兩種;
Python2的兩種字符串類型,分別叫做str和Unicode,str實例包含原始的8位值;而unicode的實例,則包含Unicode字符。
Python2的兩種字符串類型,分別叫做byte和str,與python2不同的是,byte實例包含原始的8位值;而str的實例,則包含Unicode字符。
當讀寫文件采用'b'的模式時,要求必須以二進制形式讀寫,在python2中,字符串必須為str字符串,python3中必須為byte字符串;所以在python3,'b'模式下這樣讀寫字符串
s = b'hello world!' #注意是byte字符串 f = open('open_mode.txt','wb') f.write(s)
或:
s = 'hello world!'f= open('open_mode.txt','wb') f.write(s.encode(encoding='utf-8'))
不然會報如下錯誤:
Traceback (most recent call last):
File"C:/Users/Desktop/Python/cnblogs/數據類型.py", line 125, in f.write(s)
TypeError: a bytes-like object is required, not 'str'
原文鏈接:https://blog.csdn.net/brightgreat/article/details/124763352
相關推薦
- 2023-02-07 python正則表達式實現自動化編程_python
- 2022-09-29 docker啟動rabbitmq以及使用方式詳解_docker
- 2023-01-29 python缺失值填充方法示例代碼_python
- 2022-05-06 SQL查看表字段信息如:字段名、字段類型、字段精度、字段大小、索引、主鍵等
- 2022-10-14 el-tree 懶加載,默認加載N級.異步加載子節點
- 2023-07-18 SpringBoot中無法用@Value獲取yml中的配置值的原因
- 2022-04-24 Android實現Neumorphism?UI控件_Android
- 2022-08-04 Python?venv虛擬環境跨設備遷移的實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支