当前位置: 首页 > news >正文

【python】12. File

12. File

Python open() 方法用于打开一个文件,并返回文件对象。
注意:

  1. 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
  2. 如果该文件无法被打开,会抛出 OSError
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

mode参数有:

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

12.1 close()

close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触ValueError 错误。 close() 方法允许调用多次。

当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。

fileObject.close();
# 打开文件  
fo = open("python.txt", "wb")  
print("文件名为: ", fo.name)  
  
# 关闭文件  
fo.close()

结果:

文件名为:  python.txt

12.2 flush()

flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

fileObject.flush();
# 刷新缓冲区
fo.flush()

12.3 fileno()

fileno() 方法返回一个整型的[[文件描述符]](file descriptor FD 整型),可用于底层操作系统的 I/O 操作。

fileObject.fileno(); 
# 打开文件
fo = open("python.txt", "wb")

fid = fo.fileno()
print ("文件描述符为: ", fid)

# 关闭文件
fo.close()

结果:

文件描述符为:  3

12.4 isatty()

isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。

fileObject.isatty(); 
import sys  
  
fo = open("python.txt", "wb")  
print(fo.isatty())  
fo.close()  
  
print(sys.stdout.isatty())

结果:

False
False

使用cmd运行

False
True

12.5 read()

read() 方法用于从文件读取指定的字符数(文本模式 t)或字节数(二进制模式 b),如果未给定参数 size 或 size 为负数则读取文件所有内容。

fileObject.read([size]); 

python.txt

这是第一行
这是第二行
这是第三行
这是第四行
这是第五行
# 打开文件  
fo = open("python.txt", "r+")   
  
line = fo.read(10)  # 读取10个字符
print ("读取的字符串: %s" % (line))  
  
# 关闭文件  
fo.close()

结果:

读取的字符串: 这是第一行
这是第二

12.6 readline()

readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。

fileObject.readline(); 
"""
1:python
2:python
"""
# 打开文件  
fo = open("python.txt", "r+")  
  
line = fo.readline()  
print ("读取第一行 %s" % (line))  
  
line = fo.readline(5)  
print ("读取的字符串为: %s" % (line))  
  
# 关闭文件  
fo.close()

结果:

读取第一行 1:python

读取的字符串为: 2:pyt

12.7 readlines()

readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。

fileObject.readlines( );
"""
1:python
2:python
"""
# 打开文件
fo = open("runoob.txt", "r")
 
for line in fo.readlines():                          #依次读取每行  
    line = line.strip()                             #去掉每行头尾空白  
    print ("读取的数据为: %s" % (line))
 
# 关闭文件
fo.close()

结果:

读取的数据为: 1:python
读取的数据为: 2:python

12.8 seek()

seek() 方法用于移动文件读取指针到指定位置。

fileObject.seek(offset[, whence])

参数

  • offset – 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
  • whence: 可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
# 0123456789abcdef
f = open('python.txt', 'rb+')  
f.seek(5)      # 移动到文件的第六个字节  
  
print(f.read(1))  # b'5'
  
f.seek(-3, 2)  # 移动到文件倒数第三个字节  
  
print(f.read(1)) # b'd'

12.9 tell()

tell() 方法返回文件的当前位置,即文件指针当前位置。

fileObject.tell()
# 打开文件  
fo = open("python.txt", "r+")  
print("文件名为: ", fo.name)  
  
print("读取的数据为: %s" % (fo.readline()))  
  
# 获取当前文件位置  
print("当前位置: %d" % (fo.tell()))  
  
# 关闭文件  
fo.close()

结果:

读取的数据为: 1:python

当前位置: 10

12.10 truncate()

truncate() 方法用于从文件的首行首字节开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;截断之后的所有字节被删除,其中 Widnows 系统下的换行代表2个字节大小。

fileObject.truncate( [ size ])

参数

  • size – 可选,如果存在则文件截断为 size 字节。
"""
1:python  
2:python
"""
# 打开文件  
fo = open("python.txt", "r+")  
  
fo.truncate(10)  
  
# 关闭文件  
fo.close()
"""
1:python
"""

12.11 write()

write() 方法用于向文件中写入指定字符串。

  • 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
  • 如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not 'str'
  • 换行需要制定换行符 \n。
fileObject.write( [ str ])
"""
1:python  
2:python
"""
# 打开文件  
fo = open("python.txt", "r+")  
  
str = "\n3:python"  
# 在文件末尾写入一行  
fo.seek(0, 2)  
line = fo.write( str )  
  
# 读取文件所有内容  
fo.seek(0,0)  
for index in range(3):  
    print (next(fo))  
  
# 关闭文件  
fo.close()
"""
1:python  
2:python  
3:python
"""

12.12 writelines()

与write一致,不需要换行符

12.13 with关键字

使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。

with open('./test_runoob.txt', 'w') as file:
    file.write('hello world !')

相关文章:

  • QT多线程实战经验
  • 深入C++:operator new与operator delete重载探秘
  • 常用数据库远程连接工具全解析:从入门到高效管理
  • MySQL Router被HTTP流量击穿
  • 读《浪潮之巅》:探寻科技产业的兴衰密码
  • 为AI聊天工具添加一个知识系统 之147 设计重审 之12 聚合AI
  • Vue.js 模板语法全解析:从基础到实战应用
  • 机场上云-无人机状态上报流程
  • 【标准协议】RTCA标准协议解读
  • linux安装nginx详细教程
  • Java 锁机制全面解析
  • 【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8
  • 单表达式倒计时工具:datetime的极度优雅(智普清言)
  • 扩散模型算法实战——可控图像编辑
  • uniapp小程序,输入框限制输入(正整数、小数后几位)
  • `sscanf` 和 `scanf` 的区别
  • 磁盘清理工具-TreeSize Free介绍
  • 使用 QR-Code-Styling 在 Vue 3 中生成二维码
  • 【004安卓开发方案调研】之Ionic+Vue+Capacitor开发安卓
  • Z型隶属函数(Z-shaped Membership Function)的详细介绍及python示例
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 新城悦服务:独董许新民辞任,新任独董与另两人组成调查委员会将调查与关联方资金往来
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 袁思达已任中国科学院办公厅主任
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 英国首相斯塔默住所起火,警方紧急调查情况