Python之路【第五篇】:Python基礎之文件處理

閱讀目錄

1、文件操做

一、介紹

計算機系統分爲:計算機硬件,操做系統,應用程序三部分。python

咱們用python或其餘語言編寫的應用程序若想要把數據永久保存下來,必需要保存於硬盤中,這就涉及到應用程序要操做硬件,衆所周知,應用程序是沒法直接操做硬件的,這就用到了操做系統。操做系統把複雜的硬件操做封裝成簡單的接口給用戶/應用程序使用,其中文件就是操做系統提供給應用程序來操做硬盤虛擬概念,用戶或應用程序經過操做文件,能夠將本身的數據永久保存下來。測試

有了文件的概念,咱們無需再去考慮操做硬盤的細節,只須要關注操做文件的流程:編碼

#一、打開文件,獲得文件句柄並賦值給一個變量
#二、經過句柄對文件進行操做
#三、關閉文件

代碼以下:spa

f=open('朱銳',encoding='utf-8') #python3默認是utf-8編碼,可是新建文件追隨的系統編碼,須要經過encoding轉變成utf-8
data=f.read()
print(data) f.close()

二、在python中

#1. 打開文件,獲得文件句柄並賦值給一個變量
f=open('a.txt','r',encoding='utf-8') #默認打開模式就爲r

#2. 經過句柄對文件進行操做
data=f.read()

#3. 關閉文件
f.close()

 

三、f = open('file.txt','r')的過程分析

#一、由應用程序向操做系統發起系統調用open(...)
#二、操做系統打開該文件,並返回一個文件句柄給應用程序
#三、應用程序將文件句柄賦值給變量f

2、打開文件的模式

文件句柄 = open('文件路徑','模式')
#一、打開文件的模式有(默認文本模式)
r  ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
w ,只寫模式【不可讀,文件不存在則建立,存在則清空內容】
a , 追加模式【不可讀,不存在則建立,存在則只追加內容】

#二、對於非文本文件,咱們只能使用b模式,'b'表示以字節的方式操做(而全部文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jpg格式、視頻文件的avi格式)
rb wb ab 注意:以b方式打開時,讀取到的內容是字節類型,寫入時也須要提供字節類型,不能指定編碼 #三、瞭解部分 "+" 表示能夠同時讀寫某個文件 r+:讀寫【可讀,可寫】 w+:寫讀【可讀,可寫】 a+:寫讀【可讀,可寫】 x,只寫模式【不可讀;不存在則建立,存在則報錯】 x+ ,寫讀【可讀,可寫】 xb

 

3、操做文件的方法

文件處理經常使用的讀操做:操作系統

# f=open('朱銳',encoding='utf-8')
# data=f.read()
# print(data)
# f.close()

#打開文件的模式(r w a)
# f=open('朱銳','r',encoding='utf-8')
# # data=f.read()
# # print(data)
# print(f.readable()) #判斷文件是不是讀的處理方式
#
# f=open('朱銳','w',encoding='utf-8')
# # data=f.read()
# # print(data)
# print(f.writable()) #判斷文件是不是寫的處理方式

file=open('readline',encoding='utf-8')
print('第1行',file.readline(),end='') #後面加end爲空,取消換行
print('第2行',file.readline())
print('第3行',file.readline())
print('第4行',file.readline())
print('第5行',file.readline())
print('第6行',file.readline())
print('第7行',file.readline())
print('第8行',file.readline())
print('第9行',file.readline())
輸出結果:
C:\Python35\python3.exe G:/python_s3/day16/文件處理.py
第1行 111111111111111111111
第2行 222222222222222222222

第3行 333333333333333333333

第4行 44444444444444444444

第5行 54545

第6行 454564641111111111111

第7行 333333333333343532236236

文件處理寫操做:日誌

f=open('朱銳','w',encoding='utf8')
f.write('23456789\n') f.write('1233489087766\n') f.write('33334444333\n') f.write('1233\n') f.writelines(['555\n','6666\n']) #文件內容只能是字符串,只能寫字符串 f.write(3) f.close()

文件處理追加操做:code

f=open('朱銳','a',encoding='utf-8')
f.write('寫到文件最後')

文件處理其餘模式操做:視頻

文件處理其餘操做:
f=open('xxx','r+',encoding='gbk') # data=f.read() # print(data) # f.write('123sb')  f.write('sb') #文件修改 src_f=open('xxx','r',encoding='gbk') data=src_f.readlines() src_f.close() # for i in data: # print(i) print(data) dst_f=open('xxx','w',encoding='gbk') # dst_f.writelines(data) dst_f.write(data[0]) dst_f.close() with open('a.txt','w') as f: #with方式打開文件,不用再加close關閉 f.write('1111\n') src_f=open('xxx','r',encoding='gbk') dst_f=open('xxx','w',encoding='gbk') with open('xxx','r',encoding='gbk') as src_f,\ open('xxx_new','w',encoding='gbk') as dst_f: data=src_f.read() dst_f.write(data) f=open('a.txt') print(f.encoding) #查看文件編碼

 

4、文件內光標移動

 一、read(3):blog

1、文件打開方式爲文本模式,表明讀取3個字符
二、文件打開方式爲b模式,表明讀取3個字符

二、其他的文件內光標移動都是以字節爲單位,如:seek,tell,truncate接口

注意:
一、seek有三種方式0,1,2 其中1和2必須在b模式下進行,但不管哪一種模式,都是以bytes爲單位移動的 二、truncate是截斷文件,因此文件的打開方式必須可寫,可是不能用w或w+等方式打開,由於那樣直接清空文件了,因此truncate要在r+或a或a+等模式下測試效果
#基於seek實現tail -f功能
import time with open('test','rb') as f: f.seek(0,2) while True: line=f.readline() if line: print(line.decode('utf-8')) else: time.sleep(0.2)
f=open('日誌文件','rb')
for i in f: offs=-10 while True: f.seek(offs,2) data=f.readlines() if len(data) > 1: print('文件的最後一行是%s' %(data[-1].decode('utf-8'))) break offs*=2
相關文章
相關標籤/搜索