记录_文件操作
好记心不如烂笔头
def bao_cun(self,neiRong, filename):
try:
with open(filename, 'a', encoding='utf-8') as f:
f.write(neiRong + '\n\n')
return True
except PermissionError:
print(f"错误:文件 {filename} 被其他程序占用")
return False
except Exception as e:
print(f"未知错误:{str(e)}")
return False
代码解释
- with open(filename, ‘a’, encoding=‘utf-8’) as f:
这行代码主要是使用 open() 函数打开一个文件,并且运用 with 语句来管理文件的上下文。以下是对这行代码各部分的详细解释:
open() 函数:此函数是 Python 内置的,其作用是打开文件。它接收多个参数,在这段代码里用到了以下三个参数:
filename:这是一个变量,代表要打开的文件的名称或者路径。你需要确保这个文件存在,或者你有在指定路径创建文件的权限。
‘a’:这是文件的打开模式,‘a’ 代表追加模式(append)。当以追加模式打开文件时,若文件存在,新写入的内容会被添加到文件的末尾;若文件不存在,则会创建一个新文件。
encoding=‘utf-8’:这个参数指定了文件的编码方式,‘utf-8’ 是一种通用的字符编码,能够处理多种语言的字符。
with 语句:with 语句用于创建一个上下文管理器,它会自动处理文件的打开和关闭操作。当代码块执行完毕或者出现异常时,with 语句会自动关闭文件,从而避免资源泄漏。
as f:这部分将打开的文件对象赋值给变量 f,后续就可以使用这个变量来对文件进行读写操作。 - f.write(neiRong + ‘\n\n’)
这行代码的作用是向打开的文件里写入内容,下面是详细解释:
f.write():这是文件对象 f 的一个方法,其作用是向文件中写入字符串。
neiRong:这是一个变量,代表要写入文件的内容。你需要确保这个变量是一个字符串类型。
‘\n\n’:’\n’ 是换行符,添加两个换行符 ‘\n\n’ 是为了在写入的内容后面添加两个空行,以此作为章节分隔。
neiRong + ‘\n\n’:这是将变量 neiRong 和两个换行符拼接成一个新的字符串,然后将这个新字符串写入文件。
总结
这两行代码的整体作用是:以追加模式打开指定的文件,把变量 neiRong 所代表的内容写入文件,并且在内容后面添加两个换行符作为章节分隔,最后自动关闭文件。
open() 函数可通过不同模式来打开文件
1. 只读模式
‘r’:这是默认的打开模式。当使用该模式打开文件时,仅能读取文件内容,不能进行写入操作。若文件不存在,会抛出 FileNotFoundError 异常。示例代码如下:
try:
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
except FileNotFoundError:
print("文件未找到")
2. 写入模式
‘w’:此模式用于写入文件。若文件存在,会清空文件原有内容;若文件不存在,则会创建一个新文件。示例代码如下:
with open('example.txt', 'w', encoding='utf-8') as f:
f.write('这是新写入的内容')
3. 追加模式
‘a’:以追加模式打开文件。若文件存在,新写入的内容会被添加到文件末尾;若文件不存在,则会创建一个新文件。示例代码如下:
with open('example.txt', 'a', encoding='utf-8') as f:
f.write('\n这是追加的内容')
4. 二进制模式
‘b’:该模式用于以二进制形式打开文件,可与其他模式(如 ‘r’、‘w’、‘a’)组合使用,像 ‘rb’(二进制只读)、‘wb’(二进制写入)、‘ab’(二进制追加)。常用于处理非文本文件,例如图片、音频、视频等。示例代码如下:
# 以二进制只读模式打开图片文件
with open('image.jpg', 'rb') as f:
data = f.read()
# 以二进制写入模式将图片数据写入新文件
with open('new_image.jpg', 'wb') as f:
f.write(data)
5. 读写模式
‘r+’:以读写模式打开文件,文件指针位于文件开头,可读取和写入文件。若文件不存在,会抛出 FileNotFoundError 异常。示例代码如下:
try:
with open('example.txt', 'r+', encoding='utf-8') as f:
# 读取文件内容
content = f.read()
print(content)
# 写入新内容
f.write('这是新写入的内容')
except FileNotFoundError:
print("文件未找到")
‘w+’:以读写模式打开文件,若文件存在,会清空文件原有内容;若文件不存在,则会创建一个新文件。文件指针位于文件开头。示例代码如下:
with open('example.txt', 'w+', encoding='utf-8') as f:
# 写入内容
f.write('这是新写入的内容')
# 将文件指针移到文件开头
f.seek(0)
# 读取文件内容
content = f.read()
print(content)
总结
这些是 open() 函数常见的打开模式,你可以依据实际需求来选择合适的模式。在使用时,要注意文件是否存在、文件指针的位置以及文件内容的覆盖和追加等问题。
文件对象f方法
读取相关方法
f.read(size=-1)
作用:从文件中读取指定数量的字节或字符(取决于文件的打开模式,文本模式下是字符,二进制模式下是字节)。如果不指定 size 或者 size 为负数,则读取整个文件内容。
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
f.readline(size=-1)
作用:从文件中读取一行内容。如果指定了 size,则最多读取 size 个字符或字节。
with open('example.txt', 'r', encoding='utf-8') as f:
line = f.readline()
while line:
print(line.strip())
line = f.readline()
f.readlines(hint=-1)
作用:读取文件中的所有行,并将每行作为一个元素存储在列表中返回。hint 参数用于指定大致读取的字节数,如果未指定或为负数,则读取整个文件。
with open('example.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
print(line.strip())
写入相关方法
f.write(string)
作用:将字符串 string 写入文件。返回写入的字符数(在文本模式下)或字节数(在二进制模式下)。
with open('example.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!\n')
f.writelines(lines)
作用:将字符串列表 lines 中的每个字符串依次写入文件,不会自动添加换行符,需要手动添加。
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
文件指针操作方法
f.seek(offset, whence=0)
作用:移动文件指针到指定位置。offset 是偏移量,whence 指定偏移的参考位置,0 表示从文件开头,1 表示从当前位置,2 表示从文件末尾。
with open('example.txt', 'r+', encoding='utf-8') as f:
# 移动文件指针到文件开头
f.seek(0)
content = f.read()
print(content)
f.tell()
作用:返回文件指针当前的位置。
with open('example.txt', 'r', encoding='utf-8') as f:
position = f.tell()
print(f"当前文件指针位置: {position}")
f.read(5)
position = f.tell()
print(f"读取 5 个字符后文件指针位置: {position}")
其他方法
f.close()
作用:关闭文件。虽然使用 with 语句时会自动关闭文件,但在某些情况下,手动调用 close() 方法也是必要的。
f = open('example.txt', 'r', encoding='utf-8')
try:
content = f.read()
print(content)
finally:
f.close()
f.flush()
作用:将文件缓冲区中的数据立即写入文件。通常在需要确保数据已经写入磁盘时使用。
with open('example.txt', 'w', encoding='utf-8') as f:
f.write('Some data')
f.flush() # 确保数据立即写入文件
f.truncate(size=None)
作用:将文件截断为指定的大小。如果不指定 size,则将文件截断到当前文件指针位置。
with open('example.txt', 'r+', encoding='utf-8') as f:
f.truncate(10) # 将文件截断为 10 个字符