利用文件对象提供的 write() 方法,可以向文件中写入内容。
语法格式如下:
file.write(string)
其中,fle 为打开的文件对象:
string 为要写入的字符串。
f=open('word.txt', 'a+')
# 以追加的方式打开文件
# 将信息写入文件
f.write("有时候你觉得特别难,也许因为有更大的收获')
f.close()
# 关闭文件
有的时候,需要以指定的编码格式(如UTF-8)将内容写入文件。
如将书名“Python 实效编程百例写入到book.txt 后保存编码格式为“utf-8”,
实现代码如下:
with open('book.txt','w', encoding='utf-8') as file:file.write('Python 实效编程百例'+'\n')
# 写入内容后换行就要加\n
使用with 语句处理文件
打开文件后,要及时将其关闭。如果忘记关闭可能会出现意想不到的问题。
另外,如果在打开文件时抛出了异常,那么将导致文件不能被及时关闭。
无论是否抛出异常,with 语句执行完毕后关闭已经打开的文件。
with 语句的语法格式如下:
with expression as target:with-body
参数说明:
expression:用于指定一个表达式,这里可以是打开文件的 open()函数
target:用于指定一个变量,并且将expression 的结果保存到该变量中
with-body: 用于指定 with 语句体,其中可以是执行 with 语句后相关的一些操作语句。
如果不想执行任何语句,可以直接使用 pass 语句代替。
print("\n","="*10,"Python经典应用","="*10)
with open('message.txt', 'w') as file:
# 创建或打开保存Python经典应用信息的文件pass
print("\n 即将显示..... \n")
规避常见的错误操作
1.规避文件不存在的陷阱
在默认的情况下,使用 open()函数打开一个不存在的文件,会抛出异常错误。
可以使用 os.path模块提供的 exists()函数判断文件是否存在。
例如读取文件 book.txt,如果文件存在,读取文件并输出内容;
如果文件不存在,则新建 book.txt 文件。实现代码如下:
import os
if os.path.exists('book.txt'):with open('book.txt', 'r') as file:for line in file:print(line)
else:file =open('book.txt')file.close()
2.规避读取不同编码格式文件时的陷阱
由于文件保存格式的不同,在读取文件时如果格式不正确,将会出现乱码问题或抛出异常。
1.在打开文件时指定文件的格式
例如读取文件格式为“gbk”的文件(“maintxt”),在打开文件时设置编码格式为“encoding=‘GBK’”
try:with open('book.txt', 'r',encoding='GBK') as file:for line in file:print(line)
except Exception:with open('book.txt', 'r', encoding='UTF-8') as file:for line in file:print(line,2)
2.以二进制打开文件,然后对读取的内容进行编码
用 Python 读取文件经常会出现字符编码错误,用二进制方式打开文件,就不会出现错误了。但需要在读取文件时进行编码。
首先使用 isimstance()函数判断读取的内容是否为 str 类型,如果是,则直接读取文件内容.如果不是,则使用异常处理程序尝试使用“utf-8”方式解码,否则采用“gbk”方式解码。实现代码如下:
with open('book.txt', 'rb') as file:lines = file.read()if isinstance(lines, str):print(new)else:try:new = lines.decode("utf-8")print(new)except:try:new = lines.decode("gbk")print(new)except:pass
3.强制以某种模式读取文件,忽略编码错误
有时我们需要以某种格式读取指定文件,而忽略编码错误带来的乱码问题。例如以二进制方式读取文件“maintxt”中的内容,然后以“gbk”编码强制读取该文件,实现代码如下:
with open('book.txt', 'rb') as file:article = file.read()new = article.decode('gbk',errors='ignore')print(new)