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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

目錄

  • 1.概述
  • 2.寫文本文件
  • 3.讀文本文件
    • 3.1 讀字符函數read
    • 3.2 讀取一行的函數readline和讀取所有行的readlines
  • 4.文件編碼
  • 5.文件指針
  • 6.二進制文件

1.概述

我們之前學習了python的數據類型、數據機構、函數與模塊、類與對象,我們要學習一下數據存儲。數據可以存儲到什么樣的文件中,以及如何進行文件操作。這一節主要介紹文本文件的相關知識。

2.寫文本文件

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

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

案例如下:

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

3.讀文本文件

將數據存儲到文本文件之后,我們也要進行讀取文本文件的操作。

3.1 讀字符函數read

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

def writeFile():f = open('abc.txt','wt')f.write('abc\n12345')f.close()# 讀取文件的所有內容 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)# 可以看到在結果顯示中換行符也是一個字符串.print('-----')readpartFile(20) except Exception as err:print(err)

其結果是:

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

3.2 讀取一行的函數readline和讀取所有行的readlines

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

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

def writeFile():f = open('abc.txt','wt')f.write('abc\n12345\n家鄉')f.close()# 讀取一行,可以通過函數一行行讀取所有的內容. def read_oneLine():f = open('abc.txt','rt')flag = Truest = ''while flag == True:s = f.readline()# 打印每一行的結果print(s)if s !='':st = st + selse:flag = Falseprint('-----read one line-----')print(st)f.close()# 讀取所有行,可以通過for循環從readlines中提取每一行。 def read_allLine():f = open('abc.txt','rt')s = f.readlines()# 打印readlines 的結果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)

其結果是:

abc12345家鄉-----read one line----- abc 12345 家鄉 ---main---- ['abc\n', '12345\n', '家鄉'] --read all lines------ abc 12345 家鄉

4.文件編碼

文件的本質上是二進制文件,因此文本文件存儲時,也是通過某種編碼轉化為二進制數據存儲的,相同的文本采用不同的編碼,得到的二進制數據是不同的。
對于漢字來說是十分重要的。 中文windows系統默認采用的是GBK編碼。
GBK編碼:一個英文字符是ASCII碼,占一個字節,一個漢字是兩個字節的內碼. UTF-8編碼:英文字符占一個字節,漢字占三個字節。

f = open('abc.txt','wt') f.write('abc我們') f.close() # 執行結果有7個字節, abc占三個字節,我們占4個字節,# 不使用默認的編碼,可以在open函數中用encoding參數指定編碼 f = open('abc.txt','wt',encoding='utf-8') f.write('abc我們') f.close() # 執行結果有9個字節,abc占三個字節,我們占6個字節# 用utf-8編碼存儲文本文件,再用相同的編碼讀取文件, def writeFile():f = open('abc.txt','wt',encoding='utf-8')f.write('abc\n12345\n家鄉')f.close()def writeFile1():f = open('abc.txt','wt',encoding='gbk')f.write('abc\n12345\n家鄉')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('-----------')# 用不同的編碼寫入如何打開就會出現錯誤writeFile()readFile1()print('-----------')writeFile1()readFile() except Exception as e:print(e)

其結果是:

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

5.文件指針

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

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

文件指針:

# 文件指針 f = open('abc.txt','wt') print(f.tell()) f.write('abc') print(f.tell()) f.write('我們') print(f.tell()) f.close

其結果是:

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)

其結果是:

0 3 2 5 ab123

6.二進制文件

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

def writeFile():f = open('abc.txt','wt')f.write('abc我們')f.close() # 可以用encode函數將字符轉化為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)

其結果是:

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。