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
相关文章
相关标签/搜索