文件操作的学习
文件读取
open函数
在文件打开需要一个重要的函数是open;
open函数介绍:
函数基本语法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file
: 要打开的文件名或文件路径。- mode: 打开文件的模式。
'r'
: 读取模式(默认值)。'w'
: 写入模式,如果文件存在则覆盖,不存在则创建。'a'
: 追加模式,如果文件存在则在末尾追加,不存在则创建。'b'
: 二进制模式。't'
: 文本模式(默认值)。'+'
: 更新模式(读取和写入)。
buffering
: 设置缓冲策略,0 表示不缓冲,1 表示行缓冲,负数表示系统默认缓冲。encoding
: 指定文件的编码方式,例如'utf-8'
。errors
: 指定编码错误处理策略,如'ignore'
、'replace'
等。newline
: 控制如何处理换行符,例如'\n'
、'\r\n'
。closefd
: 如果为True
,则在关闭文件时关闭底层的文件描述符。opener
: 自定义打开方式的函数(通常不需要)。
实例说明:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
read()函数
read()函数语法原型:
file.read(size)
参数说明:
size
(可选参数):表示要读取的字节数。如果省略或为负数,则读取并返回整个文件的内容。
返回值:
- 返回一个字符串,包含了文件中从当前位置开始的
size
个字节的数据,如果size
为负值或者省略,则读取并返回整个文件的内容。
代码示例:
with open('example.txt', 'r') as file:
content = file.read() # 读取整个文件内容
print(content)
这里的话有一个需要注意的地方,如果没有讲明,初学者大多会很困惑。attention:
- 如果文件大小超过内存可用空间,尝试一次性读取整个文件可能会导致内存溢出,因此在处理大文件时需要谨慎使用。
- 调用
read()
会使文件指针移动到文件末尾,因此后续的文件读取操作将无法读取到文件内容。 - 如果文件被读取完毕,再次调用
read()
会返回空字符串
readline函数
readline函数语法原型:
file.readline(size)
size
(可选参数):表示要读取的字节数。如果省略或为负数,则读取整行。
返回值:
- 返回一个字符串,表示文件中的一行内容(包括换行符
\n
),如果已到达文件末尾,则返回空字符串''
。
注意事项:
- 如果提供了
size
参数,则函数会尝试读取指定字节数的数据,但不会超过一行的长度。如果一行的长度超过了size
,则返回一部分该行的内容,并且文件指针会移动到该行剩余部分的开头。 - 调用
readline()
会使文件指针移动到下一行的开头,因此后续的文件读取操作将读取下一行的内容。 - 如果文件被读取完毕,再次调用
readline()
会返回空字符串''
。
实例代码:
with open('example.txt', 'r') as file:
line1 = file.readline() # 读取第一行内容
line2 = file.readline() # 读取第二行内容
print("Line 1:", line1)
print("Line 2:", line2)
readlines函数
readlines函数语法原型:
file.readlines(sizehint)
参数说明:
sizehint
(可选参数):表示要读取的字节数的估计值。如果省略或为负数,则会尝试读取整个文件。
这个函数与read很相似,都是读取整个文件的,但是他们比较突出的区别就是返回值不同。
readlines的返回值是一个包含所有行内容的列表,每行作为一个字符串元素存储在列表中。
而read函数返回的是一个字符串。
attention:
- 如果提供了
sizehint
参数,则函数会尝试读取指定字节数的数据,但不会超过该值。 - 如果文件大小超过了内存可用空间,尝试一次性读取所有行可能会导致内存溢出,因此在处理大文件时需要谨慎使用。
- 调用
readlines()
会使文件指针移动到文件末尾,因此后续的文件读取操作将返回空列表。 - 如果文件为空,或者已经到达文件末尾,
readlines()
将返回一个空列表。
实例代码:
with open('example.txt', 'r') as file:
lines = file.readlines() # 读取文件所有行内容
for line in lines:
print(line.strip()) # 去除每行末尾的换行符并打印
文件写入
文件写入的话open函数的mode参数得为w或者a等其他的参数,不能是r参数。
write()函数
函数原型:
file.write(str)
file
:表示文件对象,通过open()
函数打开的文件对象。str
:要写入文件的字符串数据。
在open函数的mode=’w‘的情况下,如果文件不存在的,则会创建该文件,如果文件已存在,则会清空文件内容并写入新的数据。
如果写入过程中发生错误(如文件不可写或磁盘空间不足),则会引发相应的异常,例如IOError或
OSError。
代码示例:
# 打开文件并写入字符串数据
with open('example.txt', 'w') as file:
file.write("Hello, world!\n")
file.write("This is a sample text.\n")
这个我强调一个问题,上面不是说调用write函数会清掉文件内容吗,那是对于还没运行程序之前,如果文件里有内容,就会被删掉,并写入新的数据,对于在open函数打开两次调用时是不会覆盖掉第一次写入的数据,对于上面的代码:运行结果是:
Hello, world!
This is a sample text.
然后你在重新运行程序,example.txt文件里面还是只有上面那两句。
writelines函数
函数语法:
file.writelines(lines)
lines
是包含字符串的列表或可迭代对象。
- 文件指针位置:在调用
writelines()
函数后,文件指针会在写入操作完成后停留在最后一个字符的位置。
简单示例:
# 打开文件以写入模式
with open('example.txt', 'w') as file:
lines = ["Hello, world!\n", "This is a sample text.\n"]
file.writelines(lines)