Python入門篇(五)之檔案操作和字元編碼

來源:互聯網
上載者:User

標籤:Python   檔案操作和字元編碼   

1、檔案操作1、檔案操作流程:
開啟檔案,得到檔案控制代碼並賦值給一個變數===>  file = open("yesterday",encoding="utf-8")通過控制代碼對檔案進行操作關閉檔案 ==>  file.close()
1.2、開啟檔案的模式
r,唯讀模式(預設)。w,唯寫模式。【不可讀;不存在則建立;存在則刪除內容;】a,追加模式。【可讀;   不存在則建立;存在則只追加內容;】"+" 表示可以同時讀寫某個檔案r+,可讀寫檔案。【可讀;可寫;可追加】w+,寫讀----->沒啥卵用a+,同a"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)rUr+U"b"表示處理二進位檔案(如:FTP發送上傳ISO鏡像檔案,linux可忽略,windows處理二進位檔案時需標註)rb--->二進位檔案讀取,二進位檔案必須使用二進位模式開啟wbab不同模式使用練習:書寫一個檔案,內容如下:我愛北京天安門北京天安門上太陽升data = open("yestday",encoding="utf-8").read()  --->全部讀取,預設為r(唯讀模式)print(data)執行結果:我愛北京天安門北京天安門上太陽升*******************************************************************************************當模式更改為唯寫模式時,會提示報錯,不可讀,並且會將yestday檔案內容清空data = open("yestday",‘w‘,encoding="utf-8").read()print(data)執行結果:io.UnsupportedOperation: not readable*******************************************************************************************data = open("yestday",‘a‘,encoding="utf-8")data.write("\nwelcome")執行結果:無傳回值,可以查看yestday檔案是否在尾部增加了welcome的字元*******************************************************************************************yestday檔案內容:You Are My Baby!Come on!!!Come on!!!Come on!!!welcomedata = open("yestday",‘r+‘,enconding="utf-8")print(data.readline())print(data.readline())data.write("\nBeiJing")執行結果:You Are My Baby!Come on!!!查看yestday檔案內容:You Are My Baby!Come on!!!Come on!!!Come on!!!welcomeBeiJing★★r+讀寫入模式,只能在尾部追加,無法在檔案內部進行插入,比如上面先讀取了2行,再寫入BeiJing,查看檔案的變化是在尾部增加了該字串。
1.3、file對象常用函數

file對象使用open函數來建立,以下為file對象常用的函數:

序號 方法 描述
1 file.close() 關閉檔案。關閉後檔案不能再進行讀寫操作。
2 file.flush() 重新整理檔案內部緩衝,直接把內部緩衝區的資料立刻寫入檔案, 而不是被動的等待輸出緩衝區寫入。
3 file.fileno() 返回一個整型的檔案描述符(file descriptor FD 整型), 可以用在如os模組的read方法等一些底層操作上。
4 file.isatty() 如果檔案串連到一個終端裝置返回 True,否則返回 False。
5 file.next() 返迴文件的下一行
6 file.read([size]) 從檔案讀取指定的位元組數,如果未給定或為負則讀取所有。
7 file.readline([size]) 讀取整行,包括 "\n" 字元。
8 file.seek() 設定檔案的當前位置
9 file.tell() 返迴文件的當前位置
10 file.truncate([size]) 從檔案的首行首字元開始截斷,截斷檔案為 size 個字元,無 size 表示從當前位置截斷;截斷之後 V 後面的所有字元被刪除,其中 Widnows 系統下的換行代表2個字元大小。
11 file.write(str) 將字串寫入檔案,沒有傳回值
12 file.writelines(sequence) 向檔案寫入一個序列字串列表,如果需要換行則要自己加入每行的分行符號。

進度條練習:---->使用flush重新整理緩衝區

import sys,timefor i in range(10):    sys.stdout.write("#")    sys.stdout.flush()    time.sleep(0.1)執行結果:##########

檔案的修改練習:---->通過將修改的內容儲存到一個新的檔案當中
檔案內容如下:
我愛北京天安門
天安門上太陽升
張傑
林俊傑
周杰倫

file = open("yestday","r",encoding="utf-8")filenew = open("yestdaynew",‘w‘,encoding="utf-8")for line in file:    if "張傑" in line:        line = line.replace("張傑","謝娜")    filenew.write(line)file.close()filenew.close()執行結果:產生了yestdaynew檔案,內容如下:我愛北京天安門天安門上太陽升謝娜林俊傑周杰倫
1.4、with語句

為了避免開啟檔案後忘記關閉,可以通過管理上下文,即:
with open(‘log‘,‘r‘) as f:
如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放檔案資源。
在Python 2.7 後,with又支援同時對多個檔案的上下文進行管理,即:
with open(‘log1‘) as obj1, open(‘log2‘) as obj2:

with open("yestday",‘r‘,encoding="utf-8") as file:    for line in file:        print(line)執行結果:我愛北京天安門天安門上太陽升張傑林俊傑周杰倫with open("yestday",‘r‘,encoding="utf-8") as file ,        open("yestday",‘r‘,encoding="utf-8") as file2:    for line in file2:        print(line)執行結果:我愛北京天安門天安門上太陽升張傑林俊傑周杰倫
2、字元編碼和轉碼

詳細文章:
python編碼終極版

2.1需知

1.在python2預設編碼是ASCII, python3裡預設是unicode

[[email protected] ~]# pythonPython 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import sys>>> print(sys.getdefaultencoding())asciiC:\Users\Administrator>pythonPython 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import sys>>> print(sys.getdefaultencoding())utf-8>>>

2.unicode 分為 utf-32(佔4個位元組),utf-16(佔兩個位元組),utf-8(佔1-4個位元組), 所以 utf-16就是現在最常用的unicode版本, 不過在檔案裡存的還是utf-8,因為utf8省空間

3.在py3中encode,在轉碼的同時還會把string 變成bytes類型,decode在解碼的同時還會把bytes變回string

4.Unicode與utf8的關係:
一言以蔽之:Unicode是記憶體編碼錶示方案(是規範),而UTF是如何儲存和傳輸Unicode的方案(是實現)這也是UTF與Unicode的區別。

in python 2.x#author = KIM#-*-coding:utf-8-*-  -->申明編碼的方式為utf-8import sysprint(sys.getdefaultencoding())  -->python 2.x中預設的編碼是asciimsg = "你好"msg_to_gbk = msg.decode("utf-8").encode("gbk")print(msg_to_gbk)執行結果:[[email protected] ~]# python encode.py ascii?o --->亂碼此處將utf-8編碼轉為gbk的編碼過程:msg解碼(decode)為unicode,再編碼(encode)為gbk。而預設的的編碼格式為utf-8,gbk格式明文顯示會出現亂碼。in python 3.ximport sysprint(sys.getdefaultencoding()) msg = "我愛北京天安門"msg_gbk = msg.encode("gbk")  -->預設就是unicode,不需要decodemsg_utf8 = msg.encode("utf-8")msg_unicode = msg.encode("gbk").decode("gbk")print(msg_gbk)print(msg_utf8 )print(msg_unicode)執行結果:utf-8b‘\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5‘b‘\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8‘我愛北京天安門

Python入門篇(五)之檔案操作和字元編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.