Python学习笔记(八) 文件处理

简介: Python学习笔记(八) 文件处理

这篇文章将会介绍 Python 中文件及其相关操作



1、打开和关闭


要打开文件可以使用函数 open(file, mode),该函数返回一个文件对象

  • file:必填参数,用于指定文件路径
  • mode:可选参数,用于指定文件模式,其可取值如下:
描述
'r' 读取模式(默认值)
'w' 普通写入模式,当文件不存在时创建它,当文件存在时清除原有内容后继续写入
'a' 附加写入模式,当文件不存在时创建它,当文件存在时在既有文件末尾继续写入
'x' 独占写入模式,当文件不存在时创建它,当文件存在时会引发异常
't' 文本模式    (与其它模式结合使用,默认值) 
'b' 二进制模式(与其它模式结合使用)
'+' 读写模式    (与其它模式结合使用)

要关闭文件可以使用文件对象的内置方法 close(),该方法不返回任何值

需要注意的是,在把数据写入文件后,如果没有正确地关闭文件,则很可能不能成功写入数据

因为写入的数据是先保存在缓存区的,等文件关闭或缓冲区被刷新时才会将数据真正写入文件

f = open('fileName') # 打开文件,此时使用默认的文件模式 ‘rt’
f.close()            # 关闭文件

为了避免这种情况的发生,我们可以使用 with 语句打开文件

若用 with 语句打开文件,那么当 with 语句块中的代码全部执行完毕后将自动关闭文件

with open('fileName') as f: # 打开文件
    pass
    # 自动关闭文件


2、读取和写入


(1)按字符或字节读写


首先我们要清楚,在文本模式和二进制模式下,文件的传输类型分别是 str 以及 bytes

我们可以用文件对象的内置方法 write() 写入数据,该方法返回写入的字符长度

# 写入文本文件
textFile = open('TextFile', 'wt')
textFile.write('Hello, ') # 7
textFile.write('World')   # 5
textFile.close()
# 写入字节文件
byteFile = open('ByteFile', 'wb')
byteFile.write(str.encode('Hello, ')) # 7
byteFile.write(str.encode('World'))   # 5
byteFile.close()

读取文件的方法也很简单,使用文件对象的内置方法 read() 即可

在文本模式下需要说明读取多少个字符,在二进制模式下需要说明读取多少个字节

# 读取文本文件
textFile = open('TextFile', 'rt')
a = textFile.read(2) # 指定读取两个字符
b = textFile.read()  # 若没有指定读取的字符数,则读取余下的所有字符
print(a) # He
print(b) # llo, World
# 读取字节文件
byteFile = open('ByteFile', 'rb')
c = byteFile.read(2) # 指定读取两个字节
d = byteFile.read()  # 若没有指定读取的字节数,则读取余下的所有字节
print(c.decode('utf-8')) # He
print(d.decode('utf-8')) # llo, World

(2)按行读写


想要按行写入文件,可以使用文件对象的内置方法 writelines()

该方法接收一个字符串列表,然后将这些字符串依次写入文件,该方法在写入时并不会添加换行符

f = open('File', 'w')
data = [
    'I love Python',
    'I love the world'
]
f.writelines([item + '\n' for item in data])

至于按行读取文件,可以使用文件对象的内置方法 readlines()

该方法与 writelines() 方法对应,一次读取文件中的所有行,并以列表的形式返回它们

f = open('File', 'r')
data = f.readlines()
print(data) # ['I love Python\n', 'I love the world\n']

此外我们还可以使用文件对象的内置方法 readline() 读取文件

当不提供任何参数时,读取一行并返回,当提供一个非负整数时,读取第一行中指定字符数并返回

f = open('File', 'r')
line = f.readline()
while line:
    print(line)
    line = f.readline()
# I love Python
# 
# I love the world
# 

f = open('File', 'r')
line1 = f.readline(2)
line2 = f.readline(20)
print(line1) # I
print(line2) # love Python

(3)迭代文件对象


f = open('File', 'r')
for line in f:
    print(line)
# I love Python
# 
# I love the world
# 


3、随机存取


在之前的做法中,我们将文件视为数据流,按顺序从头到尾来读取

实际上读写可以在任意位置进行,这称为随机存储,为此我们要用到文件对象的两个方法:seektell

  • seek(offset, [whence]):将文件指针移到指定的位置
    参数 offset 用于指定偏移的字符或字节数,参数 whence 用于指定偏移的初始位置,其取值有三:
    0 表示文件开头 (默认值),1 表示当前位置,2 表示文件末尾
  • tell():返回文件指针当前指向的位置


f = open('File', 'w')
f.write('0123456789') # 10
f.seek(5) # 5
f.write('Hello')
f.close()
f = open('File', 'r')
f.read() # 01234Hello
f.close()

文章知识点与官方知识档案匹配,可进一步学习相关知识

目录
相关文章
|
1月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
228 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
139 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
150 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
64 1
|
1月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
86 1
|
1月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
51 2
|
1月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
33 1
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
42 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
|
1月前
|
程序员 编译器 Python
Python学习笔记--- day01计算机基础和环境搭建(二)
Python学习笔记--- day01计算机基础和环境搭建(二)