(17)-Python3之--文件操作
1.文件的操作流程
第一,建立文件对象。
第二,调用文件方法进行操作。
第三,不要忘了关闭文件。(文件不关闭的情况下,内容会放在缓存,虽然Python会在最后自动把内容读到磁盘,但为了以防万一,要养成关闭文件的习惯)
先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。语法:
语法:
f = open(file_name [, access_mode][, buffering])
参数:
file_name:是一个包含了你要访问的文件名的字符串值。
access_mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表,这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存;如果buffering的值取1,访问文件时会寄存行;如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。
2.打开文件
打开文件的三种方式:
open(r'E:\学习日记\python\code\文件的简单操作.py')
open('E:\\学习日记\\python\\code\\文件的简单操作.py')
open('E:/学习日记/python/code/文件的简单操作.py')
#字符串前面加一个r代表原生的raw
# rt,wt,at:r读,w、a写,t表示以文本打开

3.File对象的属性
一个文件被打开后,会得到一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:

# 打开一个文件
f = open("file.txt", "wb")
print("文件名: ", f.name)
print("是否已关闭 : ", f.closed)
print("访问模式 : ", f.mode) 结果:
文件名: file.txt
是否已关闭 : False
访问模式 : wb
4.close() 函数
File对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
# 打开一个文件
f = open("file.txt", "wb")
print("文件名: ", f.name) # 关闭打开的文件
f.close() 结果:
文件名: file.txt
5.文件操作---读
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
有如下文件:

5.1读取整篇文件内容
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.read() # 通过read()进行读取
print(f_read) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。
当初公司募才纳新,未嫌我才疏学浅,承蒙收容。
入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。
时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。
去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。
此致!
敬礼!
5.2读取指定字符
read()方法可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符。
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.read(8) # 通过指定参数读取字符。
print(f_read) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
5.3读取一行内容
readline只能读取第一行代码,原理是读取到第一个换行符就停止。
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.readline() # 读取一行内容。
f_read2 = f.readline() # 再读取一行内容。
print(f_read,f_read2) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。
5.4把内容以列表的形式输出
readlines会把内容以列表的形式输出。
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.readlines() # 以列表的形式输出。
print(f_read) # 关闭打开的文件
f.close() 结果:
['尊敬的公司领导:\n', '此时辞呈敬请海涵。\n', '当初公司募才纳新,未嫌我才疏学浅,承蒙收容。\n', '入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。\n', '时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。\n', '去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。\n', '此致!\n', '敬礼!']
5.5通过for循环可以把内容按字符串输出
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
for line in f.readlines(): # 使用for循环可以把内容按字符串输出。
# 因为文件中每行内容后面都有一个换行符,输出一行内容后就会输出一个空行,
# 而且print()语句本身就可以换行,
# 如果不想输出空行,就需要使用下面的语句:print(line.strip())
print(line.strip()) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。
当初公司募才纳新,未嫌我才疏学浅,承蒙收容。
入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。
时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。
去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。
此致!
敬礼!
5.6readable()检查文件是否可读(返回布尔类型)
# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
res = f.readable()
print(res) # 关闭打开的文件
f.close() 结果:
True
6.文件操作---写
文件操作中的写有两种:
w:覆盖写
a:追加写
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符('\n'):
6.1覆盖写:
原有的文件内容是:

进行文件的覆盖写入:
# 打开一个文件
f = open('file.txt','w',encoding='utf8')
f_w = f.write('hello world')
print(f_w) # 有意思的是,这里并不打印'hello world',只打印写入多少字符 # 关闭打开的文件
f.close() 结果:
11
写入后的文件内容是:

6.2追加写
原有文件内容是:

进行文件的追加写入:
# 打开一个文件
f = open('file.txt','a',encoding='utf8')
f_w = f.write('没有钱,我很难为你办事啊!!')
print(f_w) # 有意思的是,这里并不打印'hello world',只打印写入多少字符 # 关闭打开的文件
f.close() 结果:
14
写入后文件内容是:

6.3writelines()传入可迭代对象变成字符串写入文件
writelines() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。
语法:
fileObject.writelines(iterable) 参数:
iterable -- 可迭代对象(字符串、列表、元祖、字典)。
# 打开文件
f = open("file.txt", "w", encoding="utf-8")
seq = ["文件操作教程 1\n", "文件操作教程 2"]
f.writelines(seq) # 关闭文件
f.close()
写入后的文件内容:

6.4writable()判断文件是否可写
# 打开一个文件
f = open("file.txt", "w",encoding='utf8')
res = f.writable()
print(res) # 关闭打开的文件
f.close() 结果:
True
6.5bytes类型读、写、追加
字节类型的读写和追加只需要在原有的读写追加后面加一个"b"就可以了。
读:rb
# 打开文件
f = open("file.txt", "rb")
a = f.read()
print(a)
print(a.decode('utf-8')) # 关闭文件
f.close() 结果:
b'\xe6\x96\x87\xe4\xbb\xb6\xe6\x93\x8d\xe4\xbd\x9c\xe6\x95\x99\xe7\xa8\x8b 1'
文件操作教程 1
写:wb
# 打开文件
f = open("file.txt", "wb")
f.write(b'hello world') # 字符串前面加b(不支持中文)
f.write("\n你好 世界".encode('utf-8')) # 关闭文件
f.close()

追加:ab
# 打开文件
f = open("file.txt", "ab")
f.write("\n什么是软件?\n软件是计算机程序、程序所用的数据以及有关文档资料的集合。\n软件又可以分为两大类:系统软件和应用软件。".encode('utf-8')) # 关闭文件
f.close()

7.tell和seek
tell:查询文件中光标位置
seek:光标定位
有一个文件内容如下:

查询文件中光标位置:
# 打开文件
f = open("file.txt", "r")
# 前面的数字代表移动的字符或字节,后面的数字代表模式(0:光标在开头,1:代表相对位置,2:代表光标在末尾)
f.seek(10,0)
f_tell = f.tell()
print(f_tell) # 关闭文件
f.close() 结果:
10 注:
r模式:光标默认在起始位置
w模式:先清空内容,光标回到0位置
a模式:光标默认在最后位置
# 打开一个文件
f = open("file.txt", "r+", encoding='utf-8')
str = f.read(31) # 读取31个字符
print("读取的字符串是 : ", str) # 查找当前位置
position = f.tell()
print("当前文件位置 : ", position) # 把指针再次重新定位到文件开头
position = f.seek(0, 0)
str = f.read(8) # 这次读取8个字符
print("重新读取字符串 : ", str) # 关闭打开的文件
f.close() 结果:
读取的字符串是 : You were the shadow to my light
当前文件位置 : 31
重新读取字符串 : You were
8.flush 同步将数据从缓存转移到磁盘
示例,实现进度条功能:
import sys,time # 导入sys和time模块
for i in range(40):
sys.stdout.write('*')
sys.stdout.flush() # flush的作用相当于照相,拍一张冲洗一张
time.sleep(0.2) # 下面代码也能够实现相同的功能
import time
for i in range(40):
print('*',end='',flush=True) # print中的flush参数
time.sleep(0.2)
9.truncate 截断
不能是r模式下执行
w模式下,已经清空所有数据,使用truncate没有任何意义
a模式下,截断指定位置后的内容
f = open('file.txt','a+')
f.truncate(8) #只显示6个字节的内容(6个英文字符或三个汉字,一个汉字占两个字节),后面的内容被清空。
f.seek(0,0) # 光标定位到开头
print(f.read())
结果:
You were
10.文件操作---修改
思路:由于数据存储机制的关系,我们只能把文件1中的内容读取出来,经过修改后,放到文件2中。
原文件内容为:

我们把“又是新的开始”改成英文的“It's a new beginning”:
f1 = open('file.txt','r',encoding='utf8') # f1是我们原文件
f2 = open('file2.txt','w',encoding='utf8') # f2是新文件
for line in f1: # 迭代器
if "又是新的开始" in line:
line = line.replace("又是新的开始","It's a new beginning")
f2.write(line)
# 关闭文件
f1.close()
f2.close()
然后查看文件2的内容:

11.with语句
当with代码块执行完毕时,会自动关闭文件释放内存资源,不用特意加f.close(),而且可以同时对多个文件同时操作。
用with语句重写修改文件中的代码:
with open('file.txt','r',encoding='utf8') as f1,\
open('file2.txt','w',encoding='utf8') as f2:
for line in f1: # 迭代器
if "又是新的开始" in line:
line = line.replace("又是新的开始","It's a new beginning")
f2.write(line)
(17)-Python3之--文件操作的更多相关文章
- python3.7 文件操作
#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 文件操作 # r 只读,默认打开方式,当文件不存在时会报错 # ...
- 【python3之文件操作】
一.文件操作 1.文件处理的流程 1)打开文件,得到文件句柄并赋值给一个变量 2)通过句柄对文件进行操作 3)关闭文件 例如: f = open('chenli.txt') #打开文件 first_l ...
- python3的文件操作
open的原型定义在bultin.py中,是一种内建函数,用于处理文件 open(file, mode='r', buffering=None, encoding=None, errors=None, ...
- python3之文件操作
一 打开文件 根目录在d盘的文件名为‘学习资料.txt’的文件 a)绝对路径(最开始的,根目录文件)例: e:\学习资料.txt 相对路径 直接用文件名字 b)操作方式 只读 只 ...
- python3中文件操作及编码
#之前一直没明白文件处理中的w和wb的区别到底是什么,#在看过视频后才知道,原来在linux里面是没有区别的,#但是在windows里面就能够看出区别来了#下面来个例子: with open(&quo ...
- python3中文件/IO编程
python3的文件操作可谓是我见过所有语言中最舒服的,那我们来一起看一下py3中的文件操作. 1:文件的打开方式有以下几种: 注:以上图表参考菜鸟教程 2:定位读写文件 f = open(&quo ...
- Python3学习之路~2.7 文件操作
对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 Somehow, it seems the love I knew was always the ...
- Python3 文件操作(十六)
一 文件操作 1.介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...
- Python3.x:open()文件操作
Python3.x:open()文件操作 open/文件操作: #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 f=ope ...
随机推荐
- 会Python了不起吗?是的,简直开挂
前段时间听说了一件事,彻底刷新了我对"黑科技"的认知. 有一个小学弟,大学4年混得风生水起,恋爱.赚钱.写论文.找工作,样样都很顺利,简直是妥妥的人生赢家. 问他凭什么?张口就是: ...
- ASP.NET中二进制流下载文件时进度条的使用
说明 在下载大文件时,页面会进入假死状态,于是加上一个进度条以标识后台程序正在运行. 目前,做的进度条并不是实时的,并不会根据程序执行的进度正确显示. 目前是将进度条定时加载到90%,然后停止,等待后 ...
- 为什么游戏公司的server不愿意微服务化?
背景介绍 笔者最近去面试了家游戏公司(有上市).我问他,公司有没有做微服务架构的打算及考量?他很惊讶的,我没听说过微服务耶,你可以解释一下吗? 我大概说了,方便测试,方便维护,方便升级,服务之间松耦合 ...
- Qt学习笔记-嵌入式qt程序支持显示中文
移植后得qt程序在开发板上运行时无法显示中文. 拷贝windows中的字体也不行. 从网上找到方法. 添加以下代码:需要头文件 #include <QTextCodec> QTextCo ...
- Arduino IDE 开发ESP-01/ESP8266-01读取DHT11温度湿度传感器
引脚接线: DHT11---ESP8266-01 Singnal--IO2, GND----GND, VCC----VCC DHT11引脚说明: ESP8266-01/ESP8266-01S引脚说明: ...
- CentOS 6或7 启动故障修复及root密码破解
CentOS 6或7 启动故障修复及root密码破解 目录 CentOS 6或7 启动故障修复及root密码破解 CentOS 6启动流程修复: 实验一:删除initramfs-2.6.32-754. ...
- 谈谈 Vue 模板和 JSX
工具链 从学习曲线角度来讲,结合我个人体会,React 学习路线是比 Vue 陡峭的,这个和 JSX.Template 有关吗?当然有.在 React 中使用 JSX,众所周知, JSX 需要经过 T ...
- Sql语句模糊查询字符串的两种写法
Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...
- 容器编排系统K8s之flannel网络模型
前文我们聊到了k8s上webui的安装和相关用户授权,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html:今天我们来聊一聊k8s上的网络 ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...