Python学习:7.文件操作
文件操作
我们曾将听过一个问题,将大象放入冰箱分为三步:1、打开冰箱门,2、将大象放进去,3、关上冰箱门。今天我们要讲的Python文件操作的步骤就像将大象放入冰箱的步骤一样。
使用Python操作文件的基本步骤:
- 打开文件
- 对文件内容进行操作(读取文件信息,向文件中写入信息等)
- 关闭文件
一、打开文件
在上一篇的内置函数介绍中,我们提到了open这个函数,这个函数的作用就是打开一个文件。
格式一
文件句柄 = open(文件路径,打开格式,编码)
打开文件时,需要指定文件路径和以何种方式打开文件,打开后,即可获取该文件句柄,如后通过此文件句柄对该文件操作。
f = open("c:/asd.txt","r",encode='utf-8') #打开c盘下的asd.txt文件
date = f.read() #读取文件内容
f.close() #关闭文件
print(date) #输出文件内容
格式二
with open(文件路径,打开格式,编码),使用这个打开文件不用再最后使用close()关闭文件,因为使用这个with自动进行文件关闭,但是这个需要你文件的操作都在代码块中,注意缩进。
with open("c:/asd.txt",encoding='utf-8') as f:
data = f.read() print(data)
代开文件的各种格式
打开文件时,需要指定文件路径和以何种方式打开文件,打开后,即可获取该文件
句柄,如后通过此文件句柄对该文件操作。
打开的模式有:
r,只读文件,【默认】
w,只写文件,【不可读,不存在创建;存在则清空内容】
x,只写文件,【不可读,不存在创建,存在则报错】
a,追加模式,【不可读,不存在创建,存在则只追加内容】
"+"表示可以同时读写某个文件
r+,读写【可读,可写】
w+,写读【可读,可写】
x+,写读【可读,可写】
a+,写读【可读,可写】
"b"表示以字节的方式操作
rb或r+b
wb或w+b
xb或w+b
ab或a+b
以b方式打开时,读取到的内容是字节类型,写入时也需要写入的是字节类型。
二、对文件内容进行操作
使用一般格式打开文件
1、使用只读格式打开文件的时候,进行文件写入就会报错。
2、使用写入格式代开文件的时候,会清除原有内容,然后重新写入内容。
f = open("asd","w")#清空原有文件内容
f.write("asd")#重新写入
f.close()
3、使用只写模式打开文件,没有文件就创建,有文件的时候就报错。
然后我们再次使用上一条命令,就会发生报错,因为文件存在了。
4、追加模式打开文件,当文件不存在的时候创建文件,当文件存在的时候在文件结尾追加内容。
f = open("asd","a")#不存在创建,存在追加
f.write("asd")
f.close()
使用字节格式打开文件
1、只读格式
f = open("asd","rb")#在这里打开时是以字节方式读,所以不需要加encoding="utf-8"
data = f.read()
f.close()
print(type(data)) 输出结果:
<class 'bytes'>
2、只写格式
f = open("asd","wb")
data = f.write(bytes("中国",encoding = "utf-8"))
f.close() #用字节方式写入时,需要把字符串转换为字节
两种打开方式的内部编码机制
普通格式
python内部将010101自动转换为字符串(因为在本质上在在硬盘里存的就是0101,所以在读取数据时也是0101,而普通打开时,会自动将字节转换为字符串默认使用utf-8编而在转字符串是我们可以指定什么编码格式转成字符串)。
010101======>python解释器(转换为字符串)=====>程序员看到
字节格式
用字节方式打开时字节直接给到程序员,没有编译过程,所以不能添加encoding =""在你写入是,如果你写入的是字符串,你需要吧字符串转换为010101,不然会报错因为字节方式打开没有编译过程,存储时也不会自动编译成0101所以需要自己吧字符串转换为字节f.write(bytes("中国",encoding = "utf-8")),才能保存。
010101======>程序员看到
示例
使用字节格式读取文件,文件里原来存储的是"中国"。
f = open("asd","rb")
data = f.read()
f.close()
print(data)
data1 = str(data,encoding = "utf-8")
#如果是用python存储的就是utf-8,如果是自己在记事本写的可能需要用gbk
print(data1) 输出结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
中国
使用字节格式写入文件,文件中存储的还是"中国"。
f = open("asd","wb")
str_a = "中国"
bytes_a = bytes(str_a,encoding="utf-8")
f.write(bytes_a)
print(bytes_a)
f.close() 输出结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
使用一般格式输入输出的都是字符串,使用字节格式输入输出的都是字节,在我们使用的时候一般不使用字节格式进行文件读写。
有关读写文件内部指针问题
f = open("world.txt", "r+",encoding='utf-8')
data = f.read()
print(type(data), data) f.write("地球村")
a = f.read()
print(type(a), a)
# 在这里输出的是空的,在读写时有一个指针,你读一个,指针就向后移一个,追加一个字符就再向后移一个,等你再次输出是,指针就指向空的地方,所以输出是空的
print(f.tell())#输出指针位置,字节,一个汉字三个字节
f.close() 输出结果:
<class 'str'> 地球
<class 'str'>
9
相关示例:
文件原内容:alexsel
f = open("name.txt", "r+")
data = f.read(3)
print(type(data), data)
print(f.tell()) #输出当前指针位置
f.write("地球村")
print(f.tell())
a = f.read()
print(type(a), a)
print(f.tell())
f.close() 输出结果:
<class 'str'> ale
3
13
<class 'str'> xsel
13
我们指针之前的字符进行读取怎么办,我们可以使用seek()调整指针位置。
f = open("name.txt","w+",encoding="utf-8")
f.write("三顾茅庐")
f.seek(0) #这个可以将指针移动到最开始(0),不移动,在输出是就的是空的
data = f.read()
f.close()
print(data) 输出结果:
三顾茅庐
使用追加模式打开文件的时候,文件指针直接在最后。
f = open("asda.log","a+",encoding="utf-8")
print(f.tell()) #使用追加的时候,打开文件的时候,指针直接在最后
data = f.read()
print(data) #指针直接在最后,所以这里输出为空
f.seek(0)
data = f.read()
print(data)
f.close() 输出结果:
7 alexsel
三、文件关闭
之前我们在文件操作中一直在使用,使用close()进行文件关闭,不对文件文件关闭会导致出错。
文件操作中使用到的方法
file为文件句柄
file.close()
方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
file.write()
向文件中写入数据
file.fulsh()
刷新文件内部缓存区
f1 = open("asda.log","r+",encoding="utf-8")
f1.write("啊啊啊啊啊")
f1.flush()
f1.seek(0)
print(f1.read()) 输出结果:
啊啊啊啊啊
当文件还没有关闭时,这些东西就还没有存到硬盘里,只是在内存里就像你在记事本输入了一串字符但是没有保存一样,只是在内存里,flush()功能就是把写入的字符进行存储,就像记事本里的保存一样,把内存的内容刷新到硬盘里。
file.name
获取操作文件的文件名
f = open("name.txt","r+",encoding="utf-8")
ut = f.name
print(ut) 输出结果:
name.txt
file.readable()
判断打开文件是否可读
f1 = open("asda.log","r+",encoding="utf-8")
pd=f1.readable()
print(pd) 输出结果:
True
file.readline()
仅读取一行数据(自动把指针放在第一行末尾,再读时,就是从第二行开始)
#问价内容:第一行是三顾茅庐,第二行是alexsel
f1 = open("name.txt","r+",encoding="utf-8")
data = f1.readline()
print(data)
data1 = f1.readline()
print(data1)
f1.close() 输出结果:
三顾茅庐 alexsel
file.seekable()
指针是否可操作
f1 = open("name.txt","r+",encoding="utf-8")
ut = f1.seekable()
print(ut)
f1.close() 输出结果:
True
总结:
- 不管是读文件还是写文件,操作完成后都要调用close()来关闭文件
- 但是调用with… as就可以省去close()了
- 可以指定读取和写入文件编码方式,就是在对用函数中加入encoding=’xxx’
- 我们可以使用各种方法方便我们对文件的操作
- 读写文件是我们需要注意一下指针的位置
今天的Python的文件操作就到这里,这里仅仅是简单的学习,以后我们做简单的项目的时候会加深练习。
Python学习:7.文件操作的更多相关文章
- python学习笔记:文件操作和集合(转)
转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...
- python学习总结---文件操作
# 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...
- python学习日记(文件操作)
文件操作概述 计算机系统分为:操作系统,计算机硬件,应用程序. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 ...
- 03 python学习笔记-文件操作(三)
本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...
- python学习day8 文件操作(深度学习)
文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...
- python 学习分享-文件操作篇
文件操作 f_open=open('*.txt','r')#以只读的方式(r)打开*.txt文件(需要与py文件在同一目录下,如果不同目录,需写全路径) f_open.close()#关闭文件 打开文 ...
- Python学习笔记——文件操作
python中,一切皆对象. 一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...
- Python学习之==>文件操作
1.打开文件的模式 r,只读模式(默认)[不可写:文件不存在,会报错] w,只写模式[不可读:不存在则创建:存在则删除内容] a,追加模式[不可读:不存在则创建:存在则追加内容] r+,读写模式[可读 ...
- Python学习之文件操作
Python 文件打开方式 文件打开方法:open(name[,mode[buf]]) name:文件路径mode:打开方式buf:缓冲buffering大小 f = open('test.txt', ...
- Python学习 :文件操作
文件基本操作流程: 一. 创建文件对象 二. 调用文件方法进行操作 三. 关闭文件(注意:只有在关闭文件后,才会写入数据) fh = open('李白诗句','w',encoding='utf-8') ...
随机推荐
- Long Wei information technology development Limited by Share Ltd interview summary.
Long Wei information technology development Limited by Share Ltd interview summary. I take part in c ...
- XISE菜刀V13.0 官网版 XISE菜刀VIP破解版 XISE官网
诠释: 1. 破解VIP登陆限制 2.去后门 (自查) 下载地址 :https://pan.baidu.com/s/1eR2rUOM 查毒地址:http://a.virscan.org/a3983f3 ...
- css笔记 2
定义一个类选择器.center {text-align: center} h1 有 center 类.这意味将遵守 ".center" 选择器中的规则.<h1 class=& ...
- 对EJB的认识
对EJB的认识 接触EJB以来有一段时间了,走马观花一样把它所涉及到的东西看了一遍,随着深入了解越来越感觉到ejb的很强大,用了java后觉的java好用.学历SSH觉的比java好用.学了ejb觉的 ...
- Event Driven Architecture
在微服务中使用领域事件 稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程.当你点击鼠标.敲击键盘或者插上U盘时,计算机便以中断的形式处理各种外部事件 ...
- mysql 表名区分大小写
原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lowe ...
- flex布局兼容性写法
CSS样式 flex:定义布局为盒模型 flex-v:盒模型垂直布局 flex-1:子元素占据剩余的空间 flex-align-center:子元素垂直居中 flex-pack-center:子元素水 ...
- python-正则基础
正则表达式,说的简单些,就是一个匹配的功能,在python中,只要引用 re 模块,就能进行正则匹配操作 一.math匹配 先来看一个简单的例子 import re re.match(pattern, ...
- .NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态
新建一个.NET Core控制台程序,输入如下代码: using System; using System.Threading; using System.Threading.Tasks; class ...
- 关于session序列化和session钝化和活化
在第一次启动服务器后,在session中放入一个对象.在页面可以获得,当重启服务器,但是没有关闭浏览器的情况下刷新页面仍然能够获得这个对象,前提是这个对象必须实现了java.io.Serializab ...