Top

第三章 模块

1、列举常用的模块

  os模块

  sys模块

  time模块

  random模块

  logging模块

  re模块

  json模块和pickle模块

  hashlib模块

2、如何安装第三方模块

  pip install 模块名

3、re的match和search的区别

  match()函数是在string的开始位置匹配,如果不匹配,则返回None

  search()会扫描整个string查找匹配;也就是说match()只有在开始位置匹配成功的话才有返回

4、什么是正则的贪婪匹配?贪婪模式和非贪婪模式的区别?

  参考文档

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

  非贪婪匹配:就是匹配到结果就好,尽量少的匹配字符。

  区别:默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

5、如何生成一个随机数?

import random
random.random()       # 大于0小于1之间的小数
random.uniform(1,3)  # 大于1小于3之间的小数
 
random.randint(1,5)        # [1,5]之间的整数
random.randrange(1,100,2)  # [1,100)之间的奇数

random.choice(lst)      # 随机返回列表中的一个元素
random.sample(lst, 2)   # 随机返回列表中的2个元素(2个元素不同)

random.shuffle(lst)     # 随机打算一个列表

6、如何使用python删除一个文件或者文件夹?

import os
import shutil
os.remove(path) # 删除文件
os.removedirs(path) # 删除空文件夹
shutil.rmtree(path) # 删除文件夹,可以为空也可以不为空

7、logging模块的作用以及应用场景

  • logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。
  • 记录日志

8、json序列化时可以处理的数据类型有哪些?如何定制支持datetime类型?序列化时,遇到中文转成unicode,如何保持中文形式?

  1. 可以处理的数据类型是 str、int、list、tuple、dict、bool、None
  2. 通过自定义时间序列化转换器
# 方法一:
import json
from json import JSONEncoder
from datetime import datetime

class ComplexEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime(‘%Y-%m-%d %H:%M:%S‘)
        else:
            return super(ComplexEncoder,self).default(obj)

d = {‘name‘:‘alex‘,‘data‘:datetime.now()}
print(json.dumps(d,cls=ComplexEncoder))
# {"name": "alex", "data": "2018-05-18 19:52:05"}

# 方法二:
import json
import datetime

class DateTimeEncoder(json.JSONEncoder):
    def encode(self, o):
        for k in o:
            if type(o[k]) == datetime.datetime:
                s = o[k].strftime("%Y-%m-%d")
                o[k] = s
        return json.JSONEncoder.encode(self, o)

print(json.dumps({"now":datetime.datetime.now()}, cls=DateTimeEncoder))

9、json序列化时,遇到中文转成unicode,如何保持中文形式?

# 使用关键字参数 ensure_ascii 
dic = {'key':'你好'}
print(json.dumps(dic))  # {"key": "\u4f60\u597d"}
print(json.dumps(dic, ensure_ascii=False))  # {"key": "你好"}

10、写代码实现查看一个目录下的所有文件。

import os
def func(path):
    name_lst = os.listdir(path)    # 列出当前目录下的所有文件和文件夹
    for name in name_lst:  
        path_abs = os.path.join(path,name)   # 拼接出绝对路径
        if os.path.isdir(path_abs):    # 判断是否是目录,是则递归调用
            func(path_abs)
        else:
            print(path_abs)     # 是文件则直接输出


func(r'D:\@Lily\myproject\mysite')

11、用python匹配html tag的时候,<.>和<.?>有什么区别?

  <.>     表示匹配   <一个任意非换行符>

  <.?>  表示匹配  <0个或1个任意非换行符>

12、写出邮箱的正则表达式

import re
qq = re.compile('[a-zA-Z0-9_-]+@[0-9A-Za-z]+(\.[0-9a-zA-Z]+)+')
if qq.match('1403179190@qq.com'):
    print('ok')

13、请写出以字母或下划线开始,以数字结束的正则表达式?

^[a-zA-Z_].*[0-9]$

15、写python爬虫分别用到了哪些模块?分别有什么用?列举爬虫中比较熟知的爬虫框架?

  • 模块
    • request,发起请求
    • pyquery,解析html数据
    • beautifulsoup,解析html数据
    • aiohttp,异步发送请求
  • 框架
    • pyspider,web界面的爬虫框架
    • scrapy,爬虫框架
    • selenium,模拟浏览器的爬虫框架

16、sys.path.append('xxx')的作用

  添加搜索路径

18、输入某年某月某日,判断这是这一年的第几天?

# 方法一:
tm = input('请输入时间,格式为(xxxx-xx-xx)>>>')
ret = time.strptime(f'{tm}','%Y-%m-%d')
print(ret.tm_yday)


# 方法二:
date=input('请输入某年某月某日,格式:xxxx.xx.xx')
def get_day(date):
    days1=[31,28,31,30,31,30,31,31,30,31,30,31]
    days2=[31,29,31,30,31,30,31,31,30,31,30,31]
    year,month,day = [int(i) for i in date.split('.')]
    if year % 400 ==0 or (year % 4==0 and year % 100!=0):
         days=days2
    else:
        days=days1
    return sum(days[:month-1])+day
print(get_day(date))

19、使用过python的哪些第三方组件?

   bs4

  scrapy

  redis

  pymysql

  jinja2

  ......

posted @ 2019-02-01 10:54  勇敢的巨蟹座  阅读(58)  评论(0)    收藏  举报