nova-week2

基础知识

文件

概念

1.读写模式

  • r 只读模式,只能读取和输出
  • w只写模式(删除原文件,从头开始写)
  • a只写模式(不影响原内容,在内容的结尾开始追加内容)
  • wb只写模式+二进制数据操作
  • w+可读可写模式

文件I/O基础函数及模式很详细

2.不同类型文件写入

测验

a=[1,5,2,4,3]
a.sort()
with open(r'C:\Users\lenovo\Desktop\test.txt','a') as f:
    for arr in a:
        f.write(str(arr))
    f.close()
with open(r'C:\Users\lenovo\Desktop\test.txt','a+') as f:
    f.seek(0,0)
    b=f.read(-2)
    f.write(str(b[::-1]))
    f.close()

注:
1.文件地址中的’'需要被转义,用r''或'\\'解决
2.write()函数只能写入str类型
3.'a/a+'模式打开时光标在文档尾部,所以read读不出任何数据
4.seek(offset [,from])函数,Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
5.反转字符串的常见方法
reversed()方法只能用于列表list,不能用于字符串
6.每次打开文件后,要记得用close()关闭

函数

概念

1.定义一个函数(菜鸟教程)
你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
def functionname( parameters ):
  "函数_文档字符串"
  function_suite
  return [expression]

2.函数封装
把你的代码的某一部分隐藏起来,设定为私有引用,只留下少数的函数接口来实现对应的功能,可以起到降低复杂度和保护代码隐私的作用
3.变量作用域

  • 变量作用域是指变量能被访问的范围,由变量被定义的位置决定
  • 就作用域而言,Python与C有着很大的区别,在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。
  • 在作用域中定义的变量,一般只在作用域中有效。 需要注意的是:在if-elif-else、for-else、while、try-except\try-finally等关键字的语句块中并不会产成作用域。虽然是在if语句中定义的variable变量,但是在if语句外部仍然能够使用。
  • 搜索变量名的优先级:局部作用域L > 嵌套作用域E > 全局作用域G > 内置作用域B

测验

#将上面的题目代码封装成一个函数,调用两次,第二次调用为第一次调用结果文件
def test(file):
    a=[1,5,2,4,3]
    a.sort()
    with open(file,'a') as f:
        for arr in a:
            f.write(str(arr))
        f.close()
    with open(file,'a+') as f:
        f.seek(0,0)
        b=f.read(-2)
        f.write(str(b[::-1]))
        f.close()
if __name__=="__main__":
    test(r"C:\Users\lenovo\Desktop\test.txt")
    test(r"C:\Users\lenovo\Desktop\test.txt")

爬虫实践

任务:获取example.com的正文内容和more的链接地址

import requests
from lxml import etree
def get_html(url):
    "获取网站的html代码并将其用lxml初始化,并返回"
    Html=requests.get(url)
    html=etree.HTML(Html.text)
    return html
def get_text(html):
    "获取html的正文部,并写入文件"
    with open(r"C:\Users\lenovo\Desktop\test.txt",'w')as f:
        txt=html.xpath("//h1/text()|//p/text()|//p/a/text()")
        f.write("正文部分:\n")
        for t in txt:
            f.write(t)
            f.write('\n')
        f.close()
def get_link(html):
    "获取html中的链接地址,并写入文件"
    with open(r"C:\Users\lenovo\Desktop\test.txt",'a')as f:
        link=html.xpath("//p/a/@href")
        f.write("链接地址:\n")
        for l in link:
            f.write(l)
        f.close()
if __name__=="__main__":
    html=get_html('http://www.example.com')
    get_text(html)
    get_link(html)

运行结果:

正文部分:
Example Domain
This domain is established to be used for illustrative examples in documents. You may use this
    domain in examples without prior coordination or asking for permission.
More information...
链接地址:
http://www.iana.org/domains/example

注:
1.下载第三方库直接在pycharm里下载file->settings->project:untitled->interpreter
2.url问题:需要在"www"前加上"http://"
3.用requests爬取,etree和xpath处理html代码
4.requests获取的是element类型,通过html.text转化为byte类型再用etree.HTML处理
5.etree.xpath()方法需要用到xpath语法
xpath语法基础
6.etree.xpath()方法获得list类型数据
7.改变字符串的编码的函数:.decode()方法介绍_菜鸟教程
8.html里的换行是靠 < p> 实现的,而爬取的只是字符串,所以有换行在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sunflower_zzn/article/details/88564823