對于初學者來說,一份詳盡又清晰明白的指南很重要。今天,貓貓跟大家一起,好好學習Python文件讀寫的內容,這部分內容特別常用,掌握后對工作和實戰都大有益處。學習是循序漸進的過程,欲速則不達。文章較長,建議大家收藏,以備復習查閱哦。
1、如何將列表數據寫入文件?
2、如何從文件中讀取內容?
3、多樣需求的讀寫任務
4、從with語句到上下文管理器
如何將列表數據寫入文件?
首先,我們來看看下面這段代碼,并思考:這段代碼有沒有問題,如果有問題的話,要怎么改?
li = ['python',' is',' a',' cat']with open('test.txt','w') as f: f.write(li)
現在公布答案,這段代碼會報錯:
TypeError Traceback (most recent call last)
<ipython-input-6-57e0c2f5a453> in <module>()
1 with open('test.txt','w') as f:
----> 2 f.write(li)TypeError: write() argument must be str, not list
以上代碼的想法是將list列表內容寫入txt文件中,但是報錯 TypeError: write() argument must be str。就是說,write()方法必須接受字符串(str)類型的參數。
Python中內置了str()方法,可以返回字符串版本的對象(Return a string version of object)。所以,上面的例子中,我們試試把 f.write(li) 改為 f.write(str(li)) ,先做一下字符串類型的轉化看看。代碼略。
這次沒有報錯了,但是打開文件就傻眼了吧,寫入的內容是“['python',' is',' a',' cat']”。怎么才能寫成“python is a cat”呢?
文件寫操作還有一個writelines()方法,它接收的參數是由字符串組成的序列(sequence),實際寫入的效果是將全部字符串拼接在一起。字符串本身也是一種序列,所以當參數是字符串的時候,writelines()方法等價于write()。
# 以下3種寫法等價,都是寫入字符串“python is a cat”In [20]: with open('test.txt','w') as f: ...: f.writelines(['python',' is',' a',' cat']) ...: f.writelines('python is a cat') ...: f.write('python is a cat')# 以下2種寫法等價,都是寫入列表的字符串版本“['python',' is',' a',' cat']”In [21]: with open('test.txt','w') as f: ...: f.write(str(['python',' is',' a',' cat'])) ...: f.writelines(str(['python',' is',' a',' cat']))# 作為反例,以下寫法都是錯誤的:In [22]: with open('test.txt','w') as f: ...: f.writelines([2018,'is','a','cat']) # 含非字符串 ...: f.write(['python','is','a','cat']) # 非字符串
由上可知,當多段分散的字符串存在于列表中的時候,要用writelines()方法,如果字符串是一整段,那直接使用write()方法。如果要以整個列表的形式寫入文件,就使用str()方法做下轉化。
新聞熱點
疑難解答