python程序基础知识(五)python文本文件操作
目錄
- 1.概述
- 2.寫文本文件
- 3.讀文本文件
- 3.1 讀字符函數(shù)read
- 3.2 讀取一行的函數(shù)readline和讀取所有行的readlines
- 4.文件編碼
- 5.文件指針
- 6.二進(jìn)制文件
1.概述
我們之前學(xué)習(xí)了python的數(shù)據(jù)類型、數(shù)據(jù)機(jī)構(gòu)、函數(shù)與模塊、類與對(duì)象,我們要學(xué)習(xí)一下數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)可以存儲(chǔ)到什么樣的文件中,以及如何進(jìn)行文件操作。這一節(jié)主要介紹文本文件的相關(guān)知識(shí)。2.寫文本文件
文本文件是用來(lái)存儲(chǔ)程序和數(shù)據(jù)的。 打開文本文件:
格式:
文件對(duì)象 = open(文件名,使用文件方式)
文件用open函數(shù)來(lái)打開,文件對(duì)象是一個(gè)python對(duì)象,open函數(shù)是打開文件的函數(shù),文件名是被打開文件的文件名字符串
文件的使用方式:
rt:read txt,只讀打開一個(gè)文本文件,只允許讀取數(shù)據(jù)。如果文件存在,則打開后可以按順序讀,如果文件不存在,則打開失敗。
wt:write txt,只寫打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)。如果文件不存在,則建立一個(gè)空文件;如果文件已經(jīng)存在,就把原文件內(nèi)容清空。
at:append txt,追加打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)。如果文件不存在,則建立一個(gè)空文件;
如果文件已存在,則把原文件打開并保持原內(nèi)容不變,文件位置指針指向末尾,新寫入的數(shù)據(jù)追加在文件末尾。
關(guān)閉文本文件:
格式:
文件對(duì)象.close()
打開文件操作完畢后要關(guān)閉文件釋放文件資源,文件對(duì)象是用open函數(shù)打開后返回的對(duì)象。
文件操作的異常:出現(xiàn)異常建議使用try…except語(yǔ)句捕獲可能發(fā)生的錯(cuò)誤。
寫文本文件:
格式:
文件對(duì)象.write(s)
write函數(shù)的功能是把一個(gè)字符寫入指定的文件中,s是要待寫入的字符串。
被寫入的文件可以以寫、追加方式打開,用寫方式打開一個(gè)已存在的文件時(shí),將清除原有的文件內(nèi)容,寫入字符從文件首開始。
想保留原有的字符串,則要以追加方式打開文件。
案例如下:
# 將一個(gè)字符串寫入文本文件 try:f = open('abc.txt','wt')f.write('abcdefg')f.close() except Exception as err:print(err)# abc.txt內(nèi)容是:abcdefg # 將一個(gè)字符串追加寫入文本文件 try:f = open('abc.txt','at')f.write('123456')f.close() except Exception as err:print(err) # abc.txt內(nèi)容是: # abcdefg # 1234563.讀文本文件
將數(shù)據(jù)存儲(chǔ)到文本文件之后,我們也要進(jìn)行讀取文本文件的操作。
3.1 讀字符函數(shù)read
read函數(shù)的功能是從指定的文件中讀字符:
格式:
文件對(duì)象.read()
文件對(duì)象.read(n)
read()可以讀取整個(gè)文件的內(nèi)容,read(n)可以讀取指定的n個(gè)字符,如果要讀的n大于文本文件的字符長(zhǎng)度,那么就讀取所有的文件內(nèi)容.
當(dāng)文件指針指到文件的尾部時(shí),再讀就返回一個(gè)空字符串。
其結(jié)果是:
abc 12345 ----- abc ----- abc----- abc 123453.2 讀取一行的函數(shù)readline和讀取所有行的readlines
從文件中讀取一行:
格式:
文件對(duì)象.readline()
返回值為一行字符串,readline()的規(guī)則是在文件中連續(xù)讀取字符組成的字符串,一直讀到’\n’字符或者讀到文件的尾部為止。
如果讀到了’\n’,那么返回的字符串包含’\n’。
從文件中讀取所有行:
格式:
文件對(duì)象.readlines()
返回所有的行字符串,每行都是用’\n’分開,而且一行的結(jié)尾如果是’\n’,則包含’\n’。
一般使用for循環(huán)從readlines中提取每一行.
其結(jié)果是:
abc12345家鄉(xiāng)-----read one line----- abc 12345 家鄉(xiāng) ---main---- ['abc\n', '12345\n', '家鄉(xiāng)'] --read all lines------ abc 12345 家鄉(xiāng)4.文件編碼
文件的本質(zhì)上是二進(jìn)制文件,因此文本文件存儲(chǔ)時(shí),也是通過(guò)某種編碼轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)存儲(chǔ)的,相同的文本采用不同的編碼,得到的二進(jìn)制數(shù)據(jù)是不同的。
對(duì)于漢字來(lái)說(shuō)是十分重要的。 中文windows系統(tǒng)默認(rèn)采用的是GBK編碼。
GBK編碼:一個(gè)英文字符是ASCII碼,占一個(gè)字節(jié),一個(gè)漢字是兩個(gè)字節(jié)的內(nèi)碼. UTF-8編碼:英文字符占一個(gè)字節(jié),漢字占三個(gè)字節(jié)。
其結(jié)果是:
abc12345家鄉(xiāng) ----------- abc12345家鄉(xiāng) ----------- abc12345瀹朵埂 ----------- 'utf-8' codec can't decode byte 0xbc in position 12: invalid start byte5.文件指針
文件被打開后,即可以執(zhí)行寫操作,也可以進(jìn)行讀操作,從什么地方開始讀寫是可以被控制的,這要求文件以讀寫的形式打開,
同時(shí)使用一個(gè)文件指針指向文件字節(jié)流的位置,調(diào)整指針的位置,就可以進(jìn)行任意位置的讀寫。
在程序看來(lái),文件是由一連串的字節(jié)組成的字節(jié)流,文件的每個(gè)字節(jié)都有一個(gè)位置編號(hào), 一個(gè)有n個(gè)字節(jié)的文件字節(jié)編號(hào)依次為1,2 3…n號(hào),在第n字節(jié)后面還有一個(gè)文件結(jié)束標(biāo)志EOF(End Of File),例如:
字節(jié)值:41 42 43 41 42 61 EOF
位置:1 2 3 4 5 6 7
指針: |
文件指針在對(duì)一個(gè)位置進(jìn)行讀或者寫操作之后會(huì)自動(dòng)加1,移動(dòng)到下一個(gè)位置,直到指向EOF位置,則不能讀出任何文件字節(jié).
文件指針:
# 文件指針 f = open('abc.txt','wt') print(f.tell()) f.write('abc') print(f.tell()) f.write('我們') print(f.tell()) f.close其結(jié)果是:
0 3 7 <function TextIOWrapper.close()>文件的使用方式:
# 讀寫文件 def writeFile():f = open('abc.txt','wt')print(f.tell())f.write('abc')print(f.tell())f.seek(2,0)print(f.tell())f.write('123')print(f.tell())f.close def readFile():f = open('abc.txt','rt+')print(f.read())f.close()try:writeFile()readFile() except Exception as e:print(e)其結(jié)果是:
0 3 2 5 ab1236.二進(jìn)制文件
文件的本質(zhì)是二進(jìn)制字節(jié)數(shù)據(jù),所有的文件都是二進(jìn)制文本,文本文件只是在讀寫時(shí)做了編碼轉(zhuǎn)換。 文件使用方式:
rt:read txt,只讀打開一個(gè)文本文件,只允許讀取數(shù)據(jù)。如果文件存在,則打開后可以按順序讀,如果文件不存在,則打開失敗。
wt:write txt,只寫打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)。如果文件不存在,則建立一個(gè)空文件;如果文件已經(jīng)存在,就把原文件內(nèi)容清空。
at:append txt,追加打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)。如果文件不存在,則建立一個(gè)空文件;如果文件已存在,則把原文件打開并保持原內(nèi)容不變,文件位置指針指向末尾,新寫入的數(shù)據(jù)追加在文件末尾。
rt+:讀寫方式打開一個(gè)文本文件,允許讀也允許寫數(shù)據(jù),如文件存在,則打開后文件指針在開始位置,如文件不存在,則打開失敗。
wt+:讀寫方式打開一個(gè)文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后清空文件內(nèi)容,文件指針指向0的開始位置。
at+:讀寫方式打開一個(gè)文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后不清空文件內(nèi)容,文件指針指向文件的末尾位置。
其結(jié)果是:
0x61 0x62 0x63 0xce 0xd2 0xc3 0xc7 ---------- 0x61 0x62 0x63 0xce 0xd2 0xc3 0xc7總結(jié)
以上是生活随笔為你收集整理的python程序基础知识(五)python文本文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器上的SDR传感器状态,ipmito
- 下一篇: 【Python编程】九、Python文件