【笔记】Python基础三:文件
一,文件操作
(一),文件处理流程
1,打开文件,获得文件句柄(open函数提供)并赋值
2,通过句柄对文件进行操作
3,关闭句柄
f = open('陈粒',encoding='utf-8')#open函数会先检索系统的编码gbk,文件存的是UTF-8编码,这样会出现乱码
data = f.read()
print(data)
f.close()
f = open('XXX')#把XXX使用gbk编码保存在硬盘上,然后打开不会乱码
data = f.read()
print(data)
f.close()
(二),文件打开模式:
1,文件读操作,r只读
f = open('XXX','r')#XXX使用gbk编码
#data = f.read()
#print(data)
#输出文件内容
print(f.readable())#是否可读
#输出True
# print('第一行',f.readline(),end='')#readline,一次读取一行
# print('第二行',f.readline())#注意如果前面的f.read()读取了文件内容,则使用readline时,游标在文件尾,print不会显示内容
# print('第三行',f.readline())#如果文件没有第三行,则输出空,此时游标在文件尾
print('读取到列表',f.readlines())
#输出:读取到列表 ['1111\n', '2222\n', '\n']
f.close()
2,文件写操作,w只写
f = open('陈粒2','w',encoding='utf-8')#w写模式如果文件存在会把文件清空后再操作,文件不存在则新建
#f.read()#使用写模式打开,读会报错
#输出:io.UnsupportedOperation: not readable
f.write('11111\n')
f.write('22222\n')
f.write('333\n444\n555\n')
#f.writable()
f.writelines(['666\n',''])#写一个列表到文件
#f.writelines(['666\n','777',1])#写的内容必须是字符串,如果有数字存在会报错
#输出:TypeError: write() argument must be str, not int
f.close()
3,文件追加操作,a添加
f = open('陈粒2','a',encoding='utf-8')
f.write('\n写到文件最后')
f.close()
4,文件处理其它模式,r+,可读,可写
#r+模式,可读可写
f = open('陈粒2','r+',encoding='utf-8')
data = f.read()
print(data)
f.write('写测试')
f.close()
5,文件处理B(二进制)模式
1),open默认使用t方式(文本)打开文件,但如果文件是图片,视频等就不适用文本方式打开,需要改用b方式打开
2),二进制方式可以跨平台使用
3),使用举例:
#读二进制方式打开rb,需要解码
#f = open('test11.py', 'rb', encoding='utf-8') # b的方式不能指定编码
f = open('test11.py', 'rb')
data = f.read()
#'字符串'---------encode---------》bytes
#bytes---------decode---------》'字符串'
print(data.decode('utf-8')) #要想显示正常,需要decode,并指定解码类型
#写二进制方式打开wb,需要编码
f = open('test22.py','wb')
#f.write('11111\n') #报错,字符串以二进制形式写入,需要指定编码类型
f.write(bytes('11111\n',encoding='utf-8'))#使用bytes函数转换
f.write('杨戬'.encode('utf-8')) #使用字符串本身的encode方法转换
#追加二进制方式ab,在文件最后一个位置添加
f = open('test22.py','ab')
f.write('yangjian'.encode('utf-8'))
(三),文件处理的一些方法
写文件时游标的位置
#打开文件后,游标位于开头,故从开头开始写,覆盖原有内容
f = open('陈粒2','r+',encoding='utf-8')
test = '写在头部'
test1 = bytes(test,encoding='utf-8')
print(len(test1))
#输出:12 表示占用12个字节
test2 = '111\n222\n33'
print(len(test2))
#输出:10 表示占用10个字节
f.write(test)
#在陈粒2文件的开头部分 111\n222\n33 被'写在头部'占用,从字节上看差了2个
f.close()
readlines和writelines操作列表,每一行是一个列表元素
#文件修改,只剩第一行
src_f = open('xxx','r',encoding='gbk')
data = src_f.readlines()
src_f.close()
dst_f = open('xxx','w',encoding='gbk')
dst_f.writelines(data[0])
dst_f.close()
打开文件后,无需手动关闭,使用关键字with
with open('a.txt','w') as f:
f.write('1111\n')
#使用with,复制文件内容到新文件
#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)
flush,tell,newline=
f = open('a.txt','r',encoding='utf-8')
#f.close()
print(f.closed) #文件是否关闭
print(f.encoding)#文件打开的编码,跟源文件在硬盘上怎么存储没有关系
#f.flush()#从内存保存到硬盘,可以在终端内测试,打开文件写入内容,但是硬盘上文件并没有内容,然后使用flush保存再查看内容
print(f.tell())#当前游标所在位置 0
f.readline()#读取一行移动游标到行尾
print(f.tell())#当前游标所在位置
f.close()
f = open('a.txt','r',encoding='utf-8',newline='')#使用newline关键字不让python自动处理\r,自动处理是python为跨平台准备的
print(f.readlines())
f.close()
#输出:['你好,你好\r\n']
注意:read(3)代表读取3个字符,其余的文件内游标移动都是以字节为单位,如seek,tell,truncate
#f.read()读取的是字符,不是字节
f = open('a.txt','r',encoding='utf-8')
print(f.read(3))
print(f.tell())#read以字符计算,但是tell仍以字节计算
f.close()
#输出
'''
你好,
9
'''
seek游标位置移动
f = open('a.txt','r',encoding='utf-8')
print(f.tell())
f.seek(3)
print(f.tell())
print(f.read())
f.close()
#输出
'''
0
3
好,你好
'''
#seek补充
#1模式,相对位置
f = open('seek.txt','rb')
print(f.tell())
f.seek(10)
print(f.tell())
f.seek(3)
print(f.tell()) #输出:3,默认从文件头开始计算
f.seek(5,1) #1模式,相对上一次位置移动,但是打开文件方式必须加b,二进制方式打开。二进制打开不能指定编码
print(f.tell()) #输出:8
f.close() #2模式,文件尾往回数
f = open('seek.txt','rb')
print(f.tell())
f.seek(-5,2) #2模式,从文件末尾开始seek,但是seek值必须是负数
print(f.tell())
print(f.read()) #输出b'\r\n123
f.close() #循环文件技巧
f = open('日志文件','rb')
for i in f: #使用f而不是f.readlines(),可以避免在内存中生成大列表
print(i)
f.close() #使用场景,日志文件很大,一般读取最后一行
f = open('日志文件','rb') for i in f:
offs = -3
while True:
f.seek(offs,2)
data = f.readlines()
if len(data) > 1: #如果倒数读取了一行多,打印,结束循环
print('最后一行%s'%(data[-1].decode('utf-8')))
break
offs *= 2 #如果还不到一行,增加offs继续试探
#输出:最后一行2016/12/30 sb 干了件sb事情
truncate文件截断,属于先读文件后写文件,一般r+打开
f = open('a.txt','r+',encoding='utf-8')
f.truncate(6)#从文件头开始保留6个字节,其余删除
【笔记】Python基础三:文件的更多相关文章
- Python 基础三 文件 函数
今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- Python 基础 三 反射
Python 基础 三 反射 今天我们先介绍一下反射这个概念,啥是反射?反射就是自己检测自己.在我们Python的面向对象中的反射是啥意思呢?就是通过字符串的形式操作对象相关的属性.python中的一 ...
- Python基础(三)——集合、有序 无序列表、函数、文件操作
1.Set集合 class set(object): """ set() -> new empty set object set(iterable) -> n ...
- Python基础之文件处理、函数、内置函数 (三)
内置函数 一 详细见python文档,请点击 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开 ...
- 进击的Python【第三章】:Python基础(三)
Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...
随机推荐
- 【CentOS】设置定时执行任务
1.Crond服务启动状态确认 service crond status crond (pid ) を実行中... 2.追加新的执行任务 crontab -e #Ansible: dnsmasq fo ...
- OPC客户端开发问题总结
环境准备 采用MatrikonOPC做模拟服务器,注册 OPCDAAuto.dll组件 引用 Interop.OPCAutomation.dll组件.开始开发. 1..new OPCServer()- ...
- 廖雪峰Java8JUnit单元测试-2使用JUnit-1使用Before和After
1. @Before和@After 同一个单元测试内的多个测试方法: 测试前都需要初始化某些对象 测试后可能需要清理资源fileInputStream.close() @Test public voi ...
- pyexecjs模块
1,找到断点事件 2,浏览call stack 下面的代码,找到需要的值 3,F11进入方法内部 对于网站自己定义的方法,可以用py复制下来进行执行js N = function (a, b, c) ...
- git --- 持续更新
东转西转 git 1 git 使用 1.1 git 安装 ~$: sudo apt-get install git 1.2 git 初始化 ~$: git init ~$: git remote ad ...
- webservice之jax-rs实现方式
1.什么叫restful风格 restful是一组架构约束条件和原则,满足这些约束条件和原则的应用程序即是restful风格. 2.jax-rs实现步骤 1.创建一个简单应用(略) 2.添加依赖jar ...
- To be taught if i am fortunate
此博客算是我自娱自乐的海洋球池吧. 由于我十分的菜并且文笔拙劣,所以您可能并不能在这找到什么有用的信息或者好玩的东西(或者exciting的内容). 如果您能指出我的一些错误,我将十分感激.
- Python的内置函数
python的内置函数一共有68个,下面将简单介绍各个函数的功能. abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- Error:(72) error: unknown element <user-permission> found.
android studio升级之后会出现这样一个问题,Error:(72) error: unknown element <user-permission> found. 解决方法是在项 ...
- (6.1)linux操作系统基础
Linux介绍: Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.台式计算机 ...