日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python程序基础知识(五)python文本文件操作

發(fā)布時(shí)間:2024/1/18 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python程序基础知识(五)python文本文件操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 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ù)與模塊、類與對象,我們要學(xué)習(xí)一下數(shù)據(jù)存儲。數(shù)據(jù)可以存儲到什么樣的文件中,以及如何進(jìn)行文件操作。這一節(jié)主要介紹文本文件的相關(guān)知識。

2.寫文本文件

文本文件是用來存儲程序和數(shù)據(jù)的。 打開文本文件:
格式:
文件對象 = open(文件名,使用文件方式)
文件用open函數(shù)來打開,文件對象是一個python對象,open函數(shù)是打開文件的函數(shù),文件名是被打開文件的文件名字符串
文件的使用方式:
rt:read txt,只讀打開一個文本文件,只允許讀取數(shù)據(jù)。如果文件存在,則打開后可以按順序讀,如果文件不存在,則打開失敗。
wt:write txt,只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)。如果文件不存在,則建立一個空文件;如果文件已經(jīng)存在,就把原文件內(nèi)容清空。
at:append txt,追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)。如果文件不存在,則建立一個空文件;
如果文件已存在,則把原文件打開并保持原內(nèi)容不變,文件位置指針指向末尾,新寫入的數(shù)據(jù)追加在文件末尾。
關(guān)閉文本文件:
格式:
文件對象.close()
打開文件操作完畢后要關(guān)閉文件釋放文件資源,文件對象是用open函數(shù)打開后返回的對象。
文件操作的異常:出現(xiàn)異常建議使用try…except語句捕獲可能發(fā)生的錯誤。

寫文本文件:
格式:
文件對象.write(s)
write函數(shù)的功能是把一個字符寫入指定的文件中,s是要待寫入的字符串。
被寫入的文件可以以寫、追加方式打開,用寫方式打開一個已存在的文件時(shí),將清除原有的文件內(nèi)容,寫入字符從文件首開始。
想保留原有的字符串,則要以追加方式打開文件。

案例如下:

# 將一個字符串寫入文本文件 try:f = open('abc.txt','wt')f.write('abcdefg')f.close() except Exception as err:print(err)# abc.txt內(nèi)容是:abcdefg # 將一個字符串追加寫入文本文件 try:f = open('abc.txt','at')f.write('123456')f.close() except Exception as err:print(err) # abc.txt內(nèi)容是: # abcdefg # 123456

3.讀文本文件

將數(shù)據(jù)存儲到文本文件之后,我們也要進(jìn)行讀取文本文件的操作。

3.1 讀字符函數(shù)read

read函數(shù)的功能是從指定的文件中讀字符:
格式:
文件對象.read()
文件對象.read(n)
read()可以讀取整個文件的內(nèi)容,read(n)可以讀取指定的n個字符,如果要讀的n大于文本文件的字符長度,那么就讀取所有的文件內(nèi)容.
當(dāng)文件指針指到文件的尾部時(shí),再讀就返回一個空字符串。

def writeFile():f = open('abc.txt','wt')f.write('abc\n12345')f.close()# 讀取文件的所有內(nèi)容 def readFile():f = open('abc.txt','rt')s = f.read()print(s)f.close() # 讀取文本文件的指定個字符 def readpartFile(n):f = open('abc.txt','rt')s = f.read(n)print(s)f.close()try:writeFile()readFile()print('-----')readpartFile(3)print('-----')readpartFile(4)# 可以看到在結(jié)果顯示中換行符也是一個字符串.print('-----')readpartFile(20) except Exception as err:print(err)

其結(jié)果是:

abc 12345 ----- abc ----- abc----- abc 12345

3.2 讀取一行的函數(shù)readline和讀取所有行的readlines

從文件中讀取一行:
格式:
文件對象.readline()
返回值為一行字符串,readline()的規(guī)則是在文件中連續(xù)讀取字符組成的字符串,一直讀到’\n’字符或者讀到文件的尾部為止。
如果讀到了’\n’,那么返回的字符串包含’\n’。

從文件中讀取所有行:
格式:
文件對象.readlines()
返回所有的行字符串,每行都是用’\n’分開,而且一行的結(jié)尾如果是’\n’,則包含’\n’。
一般使用for循環(huán)從readlines中提取每一行.

def writeFile():f = open('abc.txt','wt')f.write('abc\n12345\n家鄉(xiāng)')f.close()# 讀取一行,可以通過函數(shù)一行行讀取所有的內(nèi)容. def read_oneLine():f = open('abc.txt','rt')flag = Truest = ''while flag == True:s = f.readline()# 打印每一行的結(jié)果print(s)if s !='':st = st + selse:flag = Falseprint('-----read one line-----')print(st)f.close()# 讀取所有行,可以通過for循環(huán)從readlines中提取每一行。 def read_allLine():f = open('abc.txt','rt')s = f.readlines()# 打印readlines 的結(jié)果print(s)print('--read all lines------')for i in s:print(i,end='')f.close()try:writeFile()read_oneLine()print('---main----')read_allLine() except Exception as e:print(e)

其結(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)制文件,因此文本文件存儲時(shí),也是通過某種編碼轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)存儲的,相同的文本采用不同的編碼,得到的二進(jìn)制數(shù)據(jù)是不同的。
對于漢字來說是十分重要的。 中文windows系統(tǒng)默認(rèn)采用的是GBK編碼。
GBK編碼:一個英文字符是ASCII碼,占一個字節(jié),一個漢字是兩個字節(jié)的內(nèi)碼. UTF-8編碼:英文字符占一個字節(jié),漢字占三個字節(jié)。

f = open('abc.txt','wt') f.write('abc我們') f.close() # 執(zhí)行結(jié)果有7個字節(jié), abc占三個字節(jié),我們占4個字節(jié),# 不使用默認(rèn)的編碼,可以在open函數(shù)中用encoding參數(shù)指定編碼 f = open('abc.txt','wt',encoding='utf-8') f.write('abc我們') f.close() # 執(zhí)行結(jié)果有9個字節(jié),abc占三個字節(jié),我們占6個字節(jié)# 用utf-8編碼存儲文本文件,再用相同的編碼讀取文件, def writeFile():f = open('abc.txt','wt',encoding='utf-8')f.write('abc\n12345\n家鄉(xiāng)')f.close()def writeFile1():f = open('abc.txt','wt',encoding='gbk')f.write('abc\n12345\n家鄉(xiāng)')f.close()def readFile():f = open('abc.txt','rt',encoding='utf-8')for i in f.readlines():print(i)f.close()def readFile1():f = open('abc.txt','rt',encoding='gbk')for i in f.readlines():print(i)f.close()try:writeFile()readFile()print('-----------')writeFile1()readFile1()print('-----------')# 用不同的編碼寫入如何打開就會出現(xiàn)錯誤writeFile()readFile1()print('-----------')writeFile1()readFile() except Exception as e:print(e)

其結(jié)果是:

abc12345家鄉(xiāng) ----------- abc12345家鄉(xiāng) ----------- abc12345瀹朵埂 ----------- 'utf-8' codec can't decode byte 0xbc in position 12: invalid start byte

5.文件指針

文件被打開后,即可以執(zhí)行寫操作,也可以進(jìn)行讀操作,從什么地方開始讀寫是可以被控制的,這要求文件以讀寫的形式打開,
同時(shí)使用一個文件指針指向文件字節(jié)流的位置,調(diào)整指針的位置,就可以進(jìn)行任意位置的讀寫。
在程序看來,文件是由一連串的字節(jié)組成的字節(jié)流,文件的每個字節(jié)都有一個位置編號, 一個有n個字節(jié)的文件字節(jié)編號依次為1,2 3…n號,在第n字節(jié)后面還有一個文件結(jié)束標(biāo)志EOF(End Of File),例如:
字節(jié)值:41 42 43 41 42 61 EOF
位置:1 2 3 4 5 6 7
指針: |
文件指針在對一個位置進(jìn)行讀或者寫操作之后會自動加1,移動到下一個位置,直到指向EOF位置,則不能讀出任何文件字節(jié).

指針操作:使用tell函數(shù)獲取當(dāng)前文件指針的位置,如下:格式:文件對象.tell() 返回值是一個整數(shù)使用seek函數(shù)來移動文件指針,如下:格式: 文件對象.seek(offset[,whence]) offset:開始的偏移量,也代表需要移動偏移的字節(jié)數(shù),whence:可以選擇,默認(rèn)值為0。給offset的參數(shù)一個定義,表示要從哪個位置開始偏移,0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起,2代表從文件末尾開始算起。文件的使用方式:rt+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件存在,則打開后文件指針在開始位置,如文件不存在,則打開失敗。wt+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后清空文件內(nèi)容,文件指針指向0的開始位置。at+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后不清空文件內(nèi)容,文件指針指向文件的末尾位置。

文件指針:

# 文件指針 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 ab123

6.二進(jìn)制文件

文件的本質(zhì)是二進(jìn)制字節(jié)數(shù)據(jù),所有的文件都是二進(jìn)制文本,文本文件只是在讀寫時(shí)做了編碼轉(zhuǎn)換。 文件使用方式:
rt:read txt,只讀打開一個文本文件,只允許讀取數(shù)據(jù)。如果文件存在,則打開后可以按順序讀,如果文件不存在,則打開失敗。
wt:write txt,只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)。如果文件不存在,則建立一個空文件;如果文件已經(jīng)存在,就把原文件內(nèi)容清空。
at:append txt,追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)。如果文件不存在,則建立一個空文件;如果文件已存在,則把原文件打開并保持原內(nèi)容不變,文件位置指針指向末尾,新寫入的數(shù)據(jù)追加在文件末尾。
rt+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件存在,則打開后文件指針在開始位置,如文件不存在,則打開失敗。
wt+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后清空文件內(nèi)容,文件指針指向0的開始位置。
at+:讀寫方式打開一個文本文件,允許讀也允許寫數(shù)據(jù),如文件不存在,則就創(chuàng)建該文件;如文件存在,則打開后不清空文件內(nèi)容,文件指針指向文件的末尾位置。

def writeFile():f = open('abc.txt','wt')f.write('abc我們')f.close() # 可以用encode函數(shù)將字符轉(zhuǎn)化為gbk編碼,utf-8也同樣是的, def writeFile1():f = open('xyz.txt','wb')f.write('abc我們'.encode('gbk'))f.close()def readFile():f = open('abc.txt','rb')data = f.read()for i in range(len(data)):print(hex(data[i]),end=' ')f.close()def readFile1():f = open('xyz.txt','rb')data = f.read()for i in range(len(data)):print(hex(data[i]),end=' ')f.close()try:writeFile()readFile()print()print('----------')writeFile1()readFile1() except Exception as e:print(e)

其結(jié)果是:

0x61 0x62 0x63 0xce 0xd2 0xc3 0xc7 ---------- 0x61 0x62 0x63 0xce 0xd2 0xc3 0xc7

總結(jié)

以上是生活随笔為你收集整理的python程序基础知识(五)python文本文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。