open(name[,mode[buf]]) name:文件路径 mode:打开方式 buf:缓冲buffering大小
Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。
你可以先用Python内置的open()函数打开一个文件,创建一个file对象,
并且可以利用不同模式下打开文件的属性来对文件进行编辑
举例:
file object = open(file_name [, access_mode][, buffering])
# file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
# access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。
# 所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
# buffering:如果buffering的值被设为0,就不会有寄存。
# 如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。
# 如果取负值,寄存区的缓冲大小则为系统默认。
# r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 # rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 # r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 # rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 # w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新 文件。 # wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不 存在,创建新文件。 # w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文 件。 # wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存 在,创建新文件。 # a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是 说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 # ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结 尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新 文件进行写入。 # a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开 时会是追加模式。如果该文件不存在,创建新文件用于读写。 # ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结 尾。如果该文件不存在,创建新文件用于读写。
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
# 属性 描述
# file.closed 如果文件已被关闭返回true,否则返回false。
# file.mode 返回被打开文件的访问模式。
# file.name 返回文件的名称。
# file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true
File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件
Write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
Write()方法不在字符串的结尾不添加换行符('\n'):
示例:
fileObject.write(string);
read()方法
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
示例:
fileObject.read([count]);在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
Python的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。
要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。
rename()方法:
rename()方法需要两个参数,当前的文件名和新文件名。
示例:
os.rename(old_wjname,new_wjname)
你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。
示例:
os.remove(new_wj)
爬虫示例:
# 爬虫 # 从urllib导入请求 from urllib import request # request.urlopen 请求打开网址 response = request.urlopen('https://www.jd.com') # 在本地创建一个文件,然后把此文件存在一个变量中 xml = open('jd_xml.html', 'w+', encoding='utf-8') # 把服务器的响应 response 处理 read() # .read()返回全部全部内容的字符串, # .readlines() 返回list,list的每个元素是每一行的字符串 # .readline()返回一行的字符串,运行第二次,返回的就是第二行的字符串 html = response.read() xml.write(str(html.decode('utf-8'))); print('读取完毕')
python xml解析:
XML 指可扩展标记语言(eXtensible Markup Language) 被设计用来传输和存储数据。
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析XML,SAX,DOM,以及ElementTree:
pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
方法 | 特点 |
---|---|
SAX | SAX解析通过流模式在解析XML的过程中触发对应的事件(start_element、char_data、end_element)并调用用户定义的回调函数来处理XML文件。 |
DOM | 将XML数据在内存中解析成一个树,通过对树的操作来操作XML,占用内存大,解析速度较慢,优点是可以任意遍历树的节点。 |
ElementTree | 类似一个轻量级的DOM。 |
例: