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

歡迎訪問 生活随笔!

生活随笔

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

python

Python3--文件读取、写入、追加及seek()方法的使用

發布時間:2023/12/19 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3--文件读取、写入、追加及seek()方法的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python3--文件讀取、寫入、追加及seek()方法的使用

一、讀取、寫入、追加

在讀取、寫入、追加數據之前,我們先導入os模塊(我們對文件系統的訪問大多通過os模塊實現)再將我們要使用的絕對路徑賦值給變量file_name、file_name2、file_name3.

# -*- coding: utf-8 -*- """ Created on Wed Aug 9 17:11:06 2017@author: goathow to read\write file """ import osbase_dir = os.getcwd() #獲取當前文件夾的絕對路徑 file_name = os.path.join(base_dir, 'data', 'my_infor.txt') #拼接當前目錄和data文件夾和my_infor.txt文件 file_name2 = os.path.join(base_dir, 'data', 'my_write.txt') file_name3 = os.path.join(base_dir, 'data', 'my_test.txt')

1.使用readlines()方法讀取所有剩余行


my_open = open(file_name, 'r') # 若文件不存在,報錯,若存在,讀取 my_infor = my_open.readlines() #readlines()方法讀取所有剩余行,將他們作為一個字符串列表返回 my_open.close() #close()關閉文件,結束訪問 print(my_infor)
#===========================================

輸出結果如下:

['安徽財經大學\n', '應用統計\n', '大三\n', '19歲\n']
#===========================================

2.使用文件迭代器每次讀取和顯示一行


my_open = open(file_name, 'r') # 若文件不存在,報錯,若存在,讀取 for eachline in my_open:print(eachline.strip()) #使用文本迭代器,每次讀取和顯示一行 #使用strip(rm)方法移除字符串頭尾指定的字符 #rm為需要刪除的字符 #當rm為空時,默認刪除空白符(包括'\n', '\r', '\t', ' ') my_open.close()
#===========================================

輸出結果如下:

安徽財經大學

應用統計

大三

19歲

#===========================================

3.寫入數據


my_open = open(file_name2, 'w') #打開fie_name2路徑下的my_write.txt文件,采用寫入模式 #若文件不存在,創建,若存在,清空并寫入 my_open.write('one\ntwo\n') #在文件中寫入一個字符串 my_open.write('three\n') my_open.close()##檢查是否正確寫入 my_open = open(file_name2, 'r') #讀取file_name2路徑下的my_write.txt文件 my_infor = my_open.readlines() my_open.close() print(my_infor)
#===========================================

輸出結果如下:

['one\n', 'two\n', 'three\n']

#===========================================

4.追加數據


my_open = open(file_name, 'a') #打開fie_name路徑下的my_infor.txt文件,采用追加模式 #若文件不存在,創建,若存在,追加 my_open.write('蚌埠\n') my_open.close()##檢查是否正確追加 my_open = open(file_name, 'r') #讀取file_name路徑下的my_write.txt文件 my_infor = my_open.readlines() my_open.close() print(my_infor)
#===========================================

輸出結果如下:

['安徽財經大學\n', '應用統計\n', '大三\n', '19歲\n', '蚌埠\n']

#===========================================

二、seek()方法使用

seek()方法使用案例

my_open = open(file_name3, 'w+') #打開fie_name3路徑下的my_test.txt文件,以讀寫方式 #若文件不存在,創建,若存在,覆蓋 #實際上我們的確沒有這個文件 print('position_1 : ', my_open.tell()) #返回當前在文件中的位置 my_open.write('line_1\n') print('position_2 : ', my_open.tell()) my_open.write('line_2\n') print('position_3 : ', my_open.tell())try:my_open.seek(-len('line_2\n'), 1)'''seek()可以在文件中移動文件指針指針從whence(0 代表文件開始 1 代表當前位置 2 代表文件末尾)偏移off字節off為正往結束方向移動,為負往開始方向移動這里表示從當前位置往開始方向移動8字節'''print('position_4 : ', my_open.tell())read1 = my_open.readline()#從文件中讀取并返回一行print(read1, '\nposition_5 : ', my_open.tell())my_open.seek(off = 0, whence = 0)#回到最開始read2 = my_open.readline()print(read2, '\nposition_6 : ', my_open.tell()) except IOError as e:print(e,'\n', '意為:對于非二進制的文本文件,不允許使用偏移定位。')print('position_4 : ', my_open.tell())my_open.close()
#===========================================

輸出結果如下:

position_1 :? 0

position_2 :? 8

position_3 :? 16

can't do nonzero cur-relative seeks

?意為:對于非二進制的文本文件,不允許使用偏移定位。

position_4 :? 16

#===========================================

為了解決這種情況,我們建立一個二進制文件


my_open = open(file_name3, 'wb+') #讀寫打開或建立一個二進制文件,允許讀和寫 print('position_1 : ', my_open.tell())try:my_open.write('line_1\n')print('position_2 : ', my_open.tell())my_open.write('line_2\n')print('position_3 : ', my_open.tell())my_open.seek(-len('line_2\n'), 1)print('position_4 : ', my_open.tell())read1 = my_open.readline()print(read1, '\nposition_5 : ', my_open.tell())my_open.seek(off = 0, whence = 0)read2 = my_open.readline()print(read2, '\nposition_6 : ', my_open.tell()) except TypeError as e:print(e, '\n','意為:需要的是一個字節的對象,不是“str”') my_open.close() #===========================================

輸出結果如下:


position_1 :? 0

a bytes-like object is required, not 'str'

?意為:需要的是一個字節的對象,不是“str”

#===========================================

Python文件使用“wb+”方式打開,寫入字符串會報錯,因為這種打開方式為:以二進制格式打開一個文件只用于寫入。

如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。所以寫入的字符類型需為二進制格式,如:

f.write("hello".encode('ascii'))

寫入的編碼范圍不為128以內,就不能使用ascii了

如:

fh.write("漢字".encode('UTF-8'))


my_open = open(file_name3, 'wb+') print('position_1 : ', my_open.tell()) my_open.write('line_1\n'.encode('ascii')) print('position_2 : ', my_open.tell()) my_open.write('line_2\n'.encode('ascii')) print('position_3 : ', my_open.tell()) my_open.seek(-len('line_2\n'), 1) print('position_4 : ', my_open.tell()) read1 = my_open.readline() print(read1, '\nposition_5 : ', my_open.tell()) my_open.seek(0, 0) read2 = my_open.readline() print(read2, '\nposition_6 : ', my_open.tell()) my_open.close() ##檢查是否正確寫入 my_open = open(file_name3, 'r') #讀取file_name3路徑下的my_test.txt文件 my_infor = my_open.readlines() my_open.close() print(my_infor)
#===========================================

輸出結果如下:

position_1 :? 0

position_2 :? 7

position_3 :? 14

position_4 :? 7

b'line_2\n'

position_5 :? 14

b'line_1\n'

position_6 :? 7

##檢查是否正確寫入

['line_1\n','line_2\n']

#===========================================


終于可以使用seek()方法了,現在我們打開my_test.txt,查看輸出結果,如下圖所示:




發現文件里并沒有換行,這是因為:文本模式下打開文件寫入時,換行用\n即可以了。在使用二進制模式打開文件,寫入的時候,換行請使用\r\n?


my_open = open(file_name3, 'wb+') print('position_1 : ', my_open.tell()) my_open.write('line_1\r\n'.encode('ascii')) print('position_2 : ', my_open.tell()) my_open.write('line_2\r\n'.encode('ascii')) print('position_3 : ', my_open.tell()) my_open.seek(-len('line_2\r\n'), 1) print('position_4 : ', my_open.tell()) read1 = my_open.readline() print(read1, '\nposition_5 : ', my_open.tell()) my_open.seek(0, 0) read2 = my_open.readline() print(read2, '\nposition_6 : ', my_open.tell()) my_open.close()##檢查是否正確寫入 my_open = open(file_name3, 'r') #讀取file_name3路徑下的my_test.txt文件 my_infor = my_open.readlines() my_open.close() print(my_infor)
#===========================================

輸出結果如下:

position_1 :? 0

position_2 :? 8

position_3 :? 16

position_4 :? 8

b'line_2\r\n'

position_5 :? 16

b'line_1\r\n'

position_6 :? 8

##檢查是否正確寫入

['line_1\n','line_2\n']

#===========================================

打開my_test.txt,如下圖所示:



好了,累死寶寶了,表示自己原理什么的完全不懂,如有錯誤請求提出!


參考文獻:

文件使用二進制模式打開情況下的換行的方法

http://blog.csdn.net/fdl19881/article/details/7327106

Python文件使用“wb”方式打開,寫入內容

http://www.cnblogs.com/biyuting/p/5955750.html

fopen與讀寫的標識r,r+,rb+,rt+,w+.....

http://blog.csdn.net/cyforce/article/details/6159989

python文件打開方式詳解——a、a+、r+、w+區別

http://blog.csdn.net/ztf312/article/details/47259805

使用os模塊來獲取當前文件的絕對路徑和拼接路徑

https://zhidao.baidu.com/question/360101661090517412.html?qbl=relate_question_1&word=python%CF%E0%B6%D4%C2%B7%BE%B6%CF%C2%D2%BB%BC%B6







總結

以上是生活随笔為你收集整理的Python3--文件读取、写入、追加及seek()方法的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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