python--高级内容(文件,爬虫,xml解析)

文件的打开方式:

open(name[,mode[buf]])        name:文件路径     mode:打开方式      buf:缓冲buffering大小

打开关闭文件:

Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。

open函数

你可以先用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对象相关的所有属性的列表: 

#      属性                          描述
#  file.closed              如果文件已被关闭返回true,否则返回false。
#  file.mode                返回被打开文件的访问模式。
#  file.name                返回文件的名称。
#  file.softspace      如果用print输出后,必须跟一个空格符,则返回false。否则返回true

Close()方法

File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件

Write()方法

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()方法

你可以用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是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。

python对XML的解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,SAX,DOM,以及ElementTree:

1.SAX (simple API for XML )

pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(Document Object Model)

将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

Python中提供的XML解析方式:

方法 特点
SAX SAX解析通过流模式在解析XML的过程中触发对应的事件(start_element、char_data、end_element)并调用用户定义的回调函数来处理XML文件。
DOM 将XML数据在内存中解析成一个树,通过对树的操作来操作XML,占用内存大,解析速度较慢,优点是可以任意遍历树的节点。
ElementTree    类似一个轻量级的DOM。

XML文件格式:

text tail
例: hello123456789

  • tag,为标签,用于标识该元素表示哪种数据,即APP_KEY
  • attrib,即属性,用Dictionary形式保存,即{'channel' = 'CSDN'}
  • text,文本字符串,可以用来存储一些数据,即hello123456789
  • tail,尾字符串,并不是必须的,例子中没有包含。

ElementTree解析XML文件的过程:

  • 导入ElementTree
  • 解析Xml文件找到根节点:
  • 直接解析XML文件并获得根节点
  • 解析字符串
  • 遍历根节点可以获得子节点,然后就可以按照自己需要来获取字段








你可能感兴趣的:(python--高级内容(文件,爬虫,xml解析))