- 关于文件函数
open()
中打开模式r+
、w+
的理解,先来看看具体的描述:
模式 | 描述 |
---|---|
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a. r+
:该模式是会覆盖的,但是只是局部覆盖,例如:如果原始内容为:123456,然后通过 f.write("6")
的时候,这个时候文件的内容变为了: 623456,只替换了输入的位数。如果想要读取然后覆盖则需要重新来写入:
with open('a.txt') as fr:
print(fr.read())
with open('a.txt', 'w') as fw:
fw.write('12')
b. w+
:该模式的读写其实可以理解为写读,如果原来的文件有内容,通过该模式打开的时候已经被清除了,只能重新写入后才能读取到内容。
with open('a.txt', 'w+') as fw:
fw.write('12')
fw.seek(0)
print(fw.read()) # 12
- 通过 SAX 解析
xml
时需要中途退出停止解析则需要通过抛出异常的方式:
from xml.sax import ContentHandler, make_parser, handler
class XmlHandler(ContentHandler):
def endElement(self, name):
if name == "body"
raise Exception("full_load") # 通过抛出异常的方式来停止 sax 的解析
# 创建一个 XMLReader
xmlParser = make_parser()
# 关闭命名空间
xmlParser.setFeature(handler.feature_namespaces, 0)
xmlParser.setContentHandler(XmlHandler())
xmlParser.parse("b.xml")