標籤:imp jin cat python 多行 拼接 意義 eva 寫入
Python 學習的第六天
寫此部落格 是為了激勵自己,並且將自己的心得以及遇到的問題與人分享
一、課堂筆記
1.一切皆檔案 對檔案的操作一般都三個過程:開啟、操作、關閉。
f = open (‘小檔案‘,‘r‘,encoding = ‘utf8‘) # r 為讀模式 w 為寫入模式 整體為得到檔案的操作控制代碼 data = f.read() print(data) f.close()
開啟檔案,得到檔案的操作控制代碼
通過檔案操作控制代碼對檔案進行操作
關閉檔案
2.read方法
read(5) 取出來的是5個字元,在Python3 中中文算是一個字元,英文為一個字母一個字元。
3.write方法
f = open (‘小檔案‘,‘w‘,encoding = ‘utf8‘) # r 為讀模式 w 為寫入模式 a 為追加模式 # w 的時候會清空文檔內容再寫 a的時候會直接追加 f.write(‘helloworld‘) f.close()
## 執行效果:以前檔案中的內容都不見了,只有一個‘helloworld‘
4.close方法
只要開啟一個檔案,就要關閉它。
5.模式
r 模式 只可讀
w 模式 只可寫 使用w模式開啟後,先將檔案進行初始化,檔案為空白了就。
a 模式 追加模式
w+ 開啟檔案並讀寫 1. 檔案存在,則清空(也即寫入空); 2. 檔案不存在,則建立檔案 ; 3. 檔案流定位到開始位置, 所以read() 會得到空。
r+ 開啟檔案並讀寫 1. 檔案存在,開啟檔案,檔案指標定位到檔案開始位置; 2. 檔案不存在, 則報錯檔案不存在。
a+ 開啟檔案並讀添 1. 檔案存在,開啟檔案,檔案指標定位到檔案開始位置,但不清空;2. 檔案不存在,建立檔案; 3. 開啟後讀取時,在檔案開頭位置,4. 寫入時,添加到文章末尾,並且指標位於添加後的末尾,所以再次讀取會亂碼。
6.readline() 唯讀一行 readlines() 讀取全部放在一行中
在檔案中取出某一行,對其操作。
#author:"LFD"#date: 2018/2/13data = open(‘lfd‘,‘r‘,encoding=‘utf8‘) #檔案的操作控制代碼(對象),只有拿到它之後才能進行操作。num = 0for i in data.readlines(): num += 1 if num == 6: i = ‘‘.join((i.strip(),‘ssss‘)) # 通過number自己定義的一個變數來對檔案的某一行進行操作 print(i.strip())data.close()
另一種取出檔案內容的方法 跟迭代器有關 最好用如下這種方式
#author:"LFD"#date: 2018/2/13data = open(‘lfd‘,‘r‘,encoding=‘utf8‘) #檔案的操作控制代碼(對象),只有拿到它之後才能進行操作。for i in data: #這是for 內部將 data對象做成了一個迭代器,用一個取一個,對於文本來說,用一個取一行。data本神並不是一個迭代器 print(i.strip())data.close()
7.檔案操作一系列的方法:
readline() 取出檔案的一行 ;
readlines() 取出檔案的多行,得到的是一個列表,把每一個readline做成一個字串放到列表中去了。
上面雖然可以取出來,但會有多餘的 \n 分行符號,使用 .strip() 方法來去掉多餘的 \n
字串拼接最好不要用 + ,用 join() 方法會更好一些。
tell() 列印游標位置 英文字元佔一個 中文字元佔3個
seek() 調整游標的位置 data.seek(0)----這麼用
flush() 把緩衝中的資料儲存到磁碟上去,可以用來做進度條
import sys,time for i in range(30): sys.stdout.write("*") sys.stdout.flush() # 不會進入緩衝區,剛進入緩衝區存入硬碟 time.sleep(0.2)
truncate(5) 截斷,從第五個游標位置處,後面的內容全部截斷刪除掉了。檔案開啟檔案要使用 ‘ a ‘ 模式。使用 ‘ w ‘模式開啟檔案再使用該方法沒有什麼意義。
8.終極問題 對文本進行修改
#author:"LFD"#date: 2018/2/13f_read = open(‘lfd‘,‘r‘,encoding=‘utf8‘)f_write = open(‘lfd3‘,‘w‘,encoding=‘utf8‘)number = 0for line in f_read: number += 1 if number == 5: line = ‘‘.join([line,‘xxx\n‘]) #這個是對檔案某行末尾進行追加 # line = ‘hello world‘ 這個是 對檔案某行內容覆蓋書寫 f_write.write(line)f_read.close()
9.將字典型資料轉換成字元型存入檔案中,再使用eval() 方法將字元型資料轉回字典型資料。
a = str({‘beijing‘:{1:111}})print(type(a))print(a)a = eval(a) # 將字串類型的‘a‘轉換成字典型的 ‘a‘print(type(a))print(a[‘beijing‘])
10.with 語句 with() 方法
以後開啟檔案盡量採用 with 方法來開啟
f = open(‘lfd‘,‘r‘) #必須要手動關閉檔案f.readline()f.read()f.close()with open(‘lfd‘,‘r‘) as f: # 退出了with代碼塊會自動將檔案關閉 f.readline() f.read()print(‘hello world‘)
with 還支援同時對多個檔案的上下文進行管理
同時管理多個檔案對象建立
with open(‘lfd‘,‘r‘) as f_read, open(‘lfd2‘,‘w‘) as f_write: for line in f_read: f_write.write(line)
二、心得
在過年期間到現在,經曆了很多事情,包括是否還要從事這個專業,是否要繼續學習下去。中間間隔了這麼久,也認認真真的去思考了很多很多東西。最後,還是回來了。在我心裡,做一事就要像一事,連這點小事都做不好,幹什麼都成不了。
這章的學習可謂是辛苦的不行,本來2-3天的內容硬是看了足足半個月,雖然中間夾雜著過年。回到了學校,步入了正軌,但對Python的學習還是不會落下。
Python 3 學習的第六天——檔案操作