「来源: |<em>Python</em>爬虫与数据挖掘 ID:crawler_<em>python</em>」回复“书籍”即可获赠<em>Python</em>从入门到进阶共10本电子书 今 日 鸡 汤 至今思项羽,不肯过江东。一、什么是文件?文件就是把一些存储存放起来
2021-05-28 10:30:28
「來源: |Python爬蟲與資料探勘 ID:crawler_python」
回覆「書籍」即可獲贈Python從入門到進階共10本電子書
今
日
雞
湯
至今思項羽,不肯過江東。
一、什麼是檔案?
檔案就是把一些儲存存放起來,可以讓程式下一次執行的時候直接使用,而不必重新制作一份,省時省力。
二、檔案如何的開啟?
Python內建了一個open()方法,可以對檔案進行讀寫操作。
使用open()方法操作檔案就像把大象塞進冰箱一樣,可以分三步走,一是開啟檔案,二是操作檔案,三是關閉檔案。
open語法
open()方法的返回值是一個file物件,可以將它賦值給一個變數(檔案控制代碼)。
其基本語法格式為:
f = open(filename, mode)
注:
Python中,所有具有read和write方法的物件,都可以歸類為file類型。而所有的file類型物件都可以使用open方法開啟,close方法結束。
filename:一個包含了你要訪問的檔名稱的字元串值,通常是一個檔案路徑。
mode:開啟檔案的模式,有很多種,預設是隻讀方式r。
例:
# 開啟一個檔案f = open("1.txt", "w")f.write("Python 是一種非常好的語言。nPython!!n")# 關閉開啟的檔案f.close()
運行結果:
在1.txt檔案中寫入Python 是一種非常好的語言。Python。
三、訪問模式
通過一個表格,瞭解Python常用的讀寫模式
如果要讀取非UTF-8編碼的檔案,需要給open()函數傳入encoding參數。
例如,讀取GBK編碼的檔案:
>>> f = open('gbk.txt', 'r', encoding='gbk')>>> f.read()'GBK'#編碼
遇到有些編碼不規範的檔案,可能會拋出UnicodeDecodeError異常,這表示在檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,可以提供errors參數,表示如果遇到編碼錯誤後如何處理。
f = open('gbk.txt', 'r', encoding='gbk', errors='ignore')
三、 檔案物件操作
用open方法開啟一個檔案,將返回一個檔案物件。這個物件內建了很多操作方法。
下面打開了一個f檔案物件(1.txt)。對檔案物件進行相關的操作。
1. f.read(size)
讀取一定大小的資料, 然後作為字元串或位元組物件返回。size是一個可選的數字類型的參數,用於指定讀取的資料量。當size被忽略了或者為負值,那麼該檔案的所有內容都將被讀取並且返回。
f = open("1.txt", "r")str = f.read()print(str)f.close()
如果檔案體積較大,請不要使用read()方法一次性讀入記憶體,而是read(312)這種一點一點的讀。
2. f.readline()
從檔案中讀取一行n內容。換行符為'n'。如果返回一個空字元串,說明已經已經讀取到最後一行。這種方法,通常是讀一行,處理一行的情況下使用。
f = open("1.txt", "r")str = f.readline()print(str)f.close()
3. f.readlines()
將檔案中所有的行,一行一行全部讀入一個列表內,按順序一個一個作為列表的元素,並返回這個列表。readlines方法會一次性將檔案全部讀入記憶體,所以也存在一定的弊端。但是它有個好處,每行都儲存在列表裡,可隨意存取。
f = open("1.txt", "r")a = f.readlines()print(a)f.close()
4. 遍歷檔案
實際情況中,我們會將檔案物件作為一個迭代器來使用。
# 開啟一個檔案f = open("1.txt", "r")for line in f:print(line, end='')# 關閉開啟的檔案f.close()
這個方法很簡單, 不需要將檔案一次性讀出,但是同樣沒有提供一個很好的控制,與readline方法一樣只能前進,不能回退。
幾種不同的讀取和遍歷檔案的方法比較:
如果檔案很小,read()一次性讀取最方便;
如果不能確定檔案大小,反覆呼叫read(size)比較保險;
如果是配置檔案,呼叫readlines()最方便。普通情況,使用for迴圈更好,速度更快。
5. f.write()
使用write()可以完成向檔案寫入資料。
# 開啟一個檔案f = open("/tmp/foo.txt", "w")f.write("Python 是一種非常好的語言。n我喜歡Python!!n")# 關閉開啟的檔案f.close()
6. f.tell()
返回檔案讀寫指針當前所處的位置,它是從檔案開頭開始算起的位元組數。一定要注意了,是位元組數,不是字元數。
7. f.seek()
如果要改變位置指針的位置, 可以使用f.seek(offset, from_what)方法。seek()經常和tell()方法配合使用。
from_what的值,如果是0表示從檔案開頭計算,如果是1表示從檔案讀寫指針的當前位置開始計算,2表示從檔案的結尾開始計算,預設為0,例如:
offset:表示偏移量。
seek(x,0) :從起始位置即檔案首行首字元開始移動 x 個字元。seek(x,1) :表示從當前位置往後移動x個字元。seek(-x,2):表示從檔案的結尾往前移動x個字元。例:
f = open("1.txt", "rb+")f.write(b"1232312adsfalafds")print(f.tell())print(f.seek(5))print(f.read(1))print(f.seek(-3, 2))print(f.read(1))
運行結果:
8. f.close()
關閉檔案物件。當處理完一個檔案後,呼叫f.close()來關閉檔案並釋放系統的資源。檔案關閉後,如果嘗試再次呼叫該檔案物件,則會拋出異常。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了,或者更糟糕的結果。
五、 with關鍵字
with關鍵字用於Python的上下文管理器機制。為了防止open這一類檔案開啟方法,在操作過程出現異常或錯誤,或者最後忘了執行close方法,檔案非正常關閉等可能導致檔案洩露、破壞的問題。
Python提供了with這個上下文管理器機制,保證檔案會被正常關閉。不需要再寫close語句。注意縮排。
withopen('test.txt', 'w') as f: f.write('Hello, world!')
with支援同時開啟多個檔案(檔案都是隨機創建的):
withopen('1') as obj1, open('2','w') as obj2: s=obj1.read() obj2.write(s)
六、總結
本文基於Python基礎,使用Python語言,介紹了有關Python檔案操作的知識點。從檔案的基本概念入手 ,通過一個個小項目的演示,對常用的讀寫模式,檔案物件操作方法,以及在實際應用中需要注意的問題,都做了詳細的講解。希望幫助你更好的學習Python。
-------------------End -------------------
相關文章
「来源: |<em>Python</em>爬虫与数据挖掘 ID:crawler_<em>python</em>」回复“书籍”即可获赠<em>Python</em>从入门到进阶共10本电子书 今 日 鸡 汤 至今思项羽,不肯过江东。一、什么是文件?文件就是把一些存储存放起来
2021-05-28 10:30:28
那就是价格定位。根据分析师的爆料,新款的MacBook Pro搭载了更强的处理器,可能配备了更多的接口、更强大的显示器,但是与此同时也必定在更高的价位段!新推出的机器是用来取代现款14499起售的四雷电接口的<em>英特尔</em>M
2021-05-28 10:30:02
首先,大陆晶圆厂要拿下这座“堡垒”,就得面对台积电、三星、联电、格芯、<em>英特尔</em>等业内“拦路虎”。尤其是近日争论比较大的台积电南京28nm生产线,有声音认为,该条生产线将使大陆芯片代工企业不得不面临台积
2021-05-28 10:02:22
今年年中,<em>英特尔</em>更新自家移动芯片产品,带来了第11酷睿处理器,而各家笔记本厂商也相应推出搭载<em>英特尔</em>11代酷睿处理器的产品,Acer在5月27日晚,在线上举办了2021年春季新品发布会,带来了全系列新品,涵盖笔记
2021-05-28 10:01:55
作为毕业季产品,OPPO 还联合夸克高考在Reno6的负一屏实现了模拟填报志愿的功能,还可以通过跳转<em>浏览器</em>快速查询高考相关信息。 现在的用户也越来越关注个人信息安全,ColorOS 从信息级、应用级、空间级防护、
2021-05-28 10:00:53
在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。<em>浏览器</em>往www.taobao.com发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,<em>浏览器</em>转而访问该I
2021-05-28 10:00:42