爬虫友好?

  • 访问官网的官网/robots.txt

    • 百度指数 image.png
    • 汉字源image.png

      python中%d

  • 目的:通过使用%实现格式化字符串的目的

  • 用法1:通过在%字母之间插入数字,表示最大场宽,场宽代表格式化输出字符的宽度

    • %3d表示输出3位整型,不够3位右对齐,用法如下:
      • image.png
      • image.pngimage.png
    • %9.2f表示输出场宽为9的浮点数,其中小数位为2位,整数位为6,小数点占1位,不够9位右对齐

      如何让终端能直接运行.py文件

  • 尝试直接输入文件名

image.png

  • 提升权限:

    1. #查询sleep.py
    2. ls -lah sleep.py
    3. #修改权限
    4. sudo chmod u+x sleep.py
    5. #再次查询sleep.py
    6. ls -lah sleep.py

    image.png

  • 注意变化,“-rw-r”变成了“-rwxr”

    • “-”就是没有权限
    • “x”就是excute权限
  • sudo chmod u+x sleep.py
    • chmod就是change+mod,改变状态位mode bits
    • u+x
      • user当前用户组
      • +x增加excute权限
    • sleep.py
      • 修改对象文件的名称
  • 再尝试

image.png

  • 可还是需要输入文件位置“./”
  • 可不可以不输入位置,直接输入文件名?
  • 为什么ls命令就可以直接执行,不用输入ls的所在位置?
  • ls在哪?看看:

image.png

  • 在/usr/bin
  • 查看当前环境变量,发现/usr/bin在环境变量中

image.png

  • 可以通过PATH=$PATH:添加临时环境变量:

image.png

  • 路径在环境变量里就可以执行!!!不在环境变量里,ls都不能执行!!
  • 所以,python3能直接在终端里执行,因为python3的路径在环境变量里
  • 所以,只要把sleep.py和python3放在同一个路径里,就可以直接执行
  • 如何放入路径呢?

    1. #把文件拷贝过去
    2. cp sleep.py /usr/bin
    3. #用管理员权限给考过去
    4. sudo cp ./sleep.py /usr/bin
    5. #尝试执行
    6. sleep.py
    7. #为当前用户增加可执行权限
    8. chmod u+x /usr/bin/sleep.py
    9. #使用管理员权限提权
    10. sudo chmod u+x /usr/bin/sleep.py
    11. #尝试执行
    12. sleep.py
    13. #尝试用管理员执行
    14. sudo sleep.py
  • 尝试,权限不够

image.png

  • 用管理员权限,还是不行:

image.png

  • 搜索解决办法:

image.png

  • 一通操作后,还是不行,提示错误变成了:read-only file system

image.png

  • 怎么办,继续搜索,又看到了一种方法,试试:

image.png

  • 还是不行,command not found:

image.png

  • 在知乎上看到感觉很靠谱的答案,但还是卡在mount command not found

https://www.zhihu.com/question/403361335

目前的情况:

  • 输入路径、不输入python3(./sleep.py):可以执行
  • 直接输入文件名称(即使已经进入文件所在目录):不可以执行(-bash: sleep.py: command not found)
  • 问题:如何让终端自动搜索目录下符合名称的py文件并执行?
  • 应该把文件所在的目录加进环境变量,macOS如何添加环境变量?
  • 搜索:image.png
  • https://www.cnblogs.com/may18/p/12466139.html
  • 按上面的操作,将文件所在的目录添加进路径再尝试:
  • 成功:
  • image.png
  • source ~/.bash_profile是什么意思?
  • image.png
  • 是为了运行刚刚在文件中添加的命令

    如何让屏幕不再一行行往下刷,而是在原有文字上改变?

  • 用“\r”

  • 先看看\r是什么效果:image.png
  • 再根据\r的作用,修改sleep.py
  • 再尝试,成功:image.png

    数字有点小,如何能大一点?

  • 用figlet,但是在macOS终端安装不成功,暂时跳过未解决

    tty、终端、shell都是什么?

  • 用终端login,会显示ttys001,什么意思?image.png

  • tty是teletyperwriter的缩写,中文名是电传打印机,是位于终端的原始电脑连接硬件
  • terminal,终端, 电脑连线结束的端点
  • shell,终端硬件基础上的软件壳子
  • console,直接连接电脑主机的控制面板

    vim中的:%!xxd是什么意思?

  • 表示命令

  • %表示所有行image.png
  • 表示强制执行
  • xxd表示“以16进制显示一个文件”
  • :%!xxd连起来就是以16进制显示当前的文件
  • :%!xxd -r是将十六进制还原为二进制
  • 参考链接

    转义总结:

  • \t,水平制符表,tab

  • \n,回车
  • \r,清空本行前面的内容
  • \b,退回一格
  • \v,效果同\f
  • \f,效果是line feed的样子,如图:image.png

    不同进制如何表示,互相之间如何转化?

  • 十进制

    • 直接写:65
    • int()
    • decimal
    • 没有前缀, 直接写数字
  • 二进制
    • 前缀0b,0表明这是一个数字,b表明这是一个二进制(binary)数字
    • 0b1000001
    • bin()
    • binary
  • 十六进制
    • 前缀0x
    • 0x41
    • hex()
    • hexadecimal
  • 八进制
    • 前缀0o
    • 0o141
    • oct()
    • octal
  • ascii转化

    • ord(“a”)
      • image.png
    • chr(“65”)
      • image.png
    • \x41 十六进制表示字符
    • \141 八进制表示字符
      • image.png
    • “tab”对应什么呢?十进制、十六、八、二分别对应什么呢?
      • image.png
      • image.png
      • image.png*注意,print("\x9")是错误的,十六进制需要用09表示9
    • image.png

      为什么是\是反斜杠,/是斜杠,而不是反过来?

  • slash 斜杠

  • backslash 反斜杠
  • 我们都是“右撇子”
    • 砍或者挥鞭子的时候,一般是从右上到左下,也就是/
    • slash本身就有砍的意思
  • 转义字符本身就有“逆向”、“反”的感觉
  • 所以转译用反斜杠\
  • image.png

    还有哪些转义用法?有关\33的转义

  • image.png

  • 试试\33[2J:
    • image.png
    • \33是转移序列
      • \033的省略写法
      • 是八进制形态
      • 写成十六进制是\xlb
    • J是模式选择,清屏模式,分别代表:
      • 0J - 从光标清到屏幕结束
      • 1J - 从光标清到屏幕开头
      • 2J - 整屏幕清
      • 3J - 整屏幕清并选择清空滚动缓存
  • print("\33[1;1Hoeasy")
    • H是选择模式
    • 1;1指的是左上角,整个屏幕是80*24
    • 设置好之后输出后面的oeasy
  • 可以设置颜色吗?

    • image.png

      重新梳理概念

  • \是转义字符

  • \e是转义序列
  • \e这个转义序列转移到escape的状态,正常的输入退出
  • 进入control sequence控制序列
  • 控制序列的东西是不能直接输出的,而是用来控制位置、样式、颜色等
  • 开始于CSI(Control Sequence Initiator)
  • \e对应的ascii值是(033)8
  • 所以一般写作\033[控制信息
  • 各终端定制的标准各种各样,形成了各产品内部的标准
  • 最终统一到了ansi下

    看起来,常见的符号’♠❤♦♣‘都有自己的序号

  • image.png

  • 也可以对应的转义回去:image.png
  • 也可以用\33[控制信息给黑桃加上颜色:image.png

\u到底是什么意思?

  • 看起来加上十六进制数,就可以找到对应的字符
  • 和ascii码表有关吗?
  • image.png
  • ascii:image.png
  • image.png
  • 来试试\u到底有哪些作用?

    • image.png
    • 看起来 不同的四位数字,对应不同的符号
    • 这“四位数字”是十六进制的:因为hex(ord("㑖"))得到了'0x3456',就是最初输入的'\u3456'
    • 也就是说4位的十六进制数,对应一个字符
    • 这就像7位二进制数,对应一个字符
    • 7位二进制数对应一个字符的编码方式叫做ascii
    • 那么4位的十六进制数,对应一个字符叫做什么?
      • 答:unicode
    • 问题来了:为什么有了ascii,还要做个unicode?

      关于unicode

  • 编码方式很多,

  • 不同国家有不同的编码需求,因为不同国家的字符不同
  • 所以衍生出了很多不同的编码方式
  • 但是,如何能把所有的字符,用统一的编码方式表达呢?
  • unicode就是用来解决这个问题的
  • image.png
  • 随着字符的不断增加,被编码进unicode的内容也不断增加
  • 整个编码区域分为若个block,新版本就是增加block中的字符
  • “集装箱标准化”一旦开始,就会反过来约束新加入的人
  • 如果你想加入集装箱行列,就需要先遵守已有的规则
  • image.png
  • 已知汉字,得到unicode的过程,叫编码;反过来叫解码:image.png
  • 把str字符串编码(encode)成bytes字节序列
  • 把bytes字节序列解码(decode)成str字符串
  • ascii()得到字符串的编码状态,evla()得到编码的字符串状态
    • image.png
    • image.png
  • 随着unicode的不断进化,数量逐渐增加,超过了65536(为什么限制是65536,65536=216)
  • 导致2字节放不下(1字节=8比特,2字节=16比特,就能代表216种不同的组合)
  • 那就要启用3字节吗?1字节是不是也能代表一部分内容?
  • 需要一种“可变长度”的编码方式:utf-8

    pack、encode都是编码,unpack、nuicode都是解码

  • pack的对象是数字

  • encode的对象是字符

终端中常用的命令

  • mkdir filename在当前目录下新建filename文件夹
  • vi -o i.py o.py-o的意思是同时打开两个窗口,两个窗口分别是两个文件i.py和o.py
  • ~代表当前用户的根目录,/Users/niuyinglei
  • pwd显示当前所在路径

在python_file中的子文件夹中新建的.py文件,又不能直接运行了(需要输入python3)

  • 把子文件夹路径加入~/.bash_profileimage.png
  • source ~/.bash_profile后尝试执行:
  • 无权限:image.pngimage.png
  • 查询i.py的权限,并提升权限:image.png
  • 再次尝试,成功!image.png
  • 用同样的操作,提升另一个文件o.py的权限

如何在macOS终端中使用tree命令?

  • macOS没有内置tree,需要额外安装
  • 需要先安装管理tree的工具:homebrew

    • 安装homebrew: https://brew.sh/index_zh-cn.htmlimage.png
    • 好像因为被墙了 无法安装:image.png
    • 被墙了怎么安装?搜索:https://www.jianshu.com/p/f43fbacf910d

      • 方案:替换本地hosts,就是ip地址;具体原理可以了解下dns域名解析
      • 先查询真实IP:在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP
      • 修改本地的ip地址:sudo vim /etc/hsots打开ip地址文件,将刚刚的ip和对应的网址粘贴进去,保存退出,这就算是完成了hosts的更新
      • 能安装了吗?可以了~image.png
      • 但是好像又没完全安装,看起来还是网络连接问题:image.png
      • 一开始安装homebrew是为了使用tree,先试试能不能安装tree:image.png不行…
      • homebrew安装成功了吗?image.png看来没有…
      • 方案1失败,尝试另一个方案:https://blog.csdn.net/qq_35624642/article/details/79682979

        • 有个评论,提供了更简单的方案,直接执行下列语句:image.png

          1. /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
        • 能成功吗?看起来成功了,感谢大佬image.png

    • 使用brew安装tree,并使用tree .查看当前目录:image.png

      终端中的cat命令;参考https://www.cnblogs.com/cc1127/p/f3b7aa81b8deab51187958fc6a00e2c7.html

  • cat filename一次性显示整个文件

  • cat > filename创建一个新文件,只能创建新文件,不能编辑已有文件
  • cat file1 file2 > file将几个文件合并为一个文件

    postgresql

  • 安装与启动,参考:https://www.elliotblackburn.com/installing-postgresql-on-macos-osx/

  • 初始化数据库:initdb --locale=C -E UTF-8 /usr/local/var/postgres1
  • image.png
  • 初始化成功后,提示:
    • You can now start the database server using:
    • pg_ctl -D /usr/local/var/postgres1 -l logfile start
  • 用提示的语句:pg_ctl -D /usr/local/var/postgres1 -l logfile start,失败:
    • image.png
  • 用终端自己启动不成功,但是打开启动台的SQL shell成功打开了:
    • image.png
  • 初始化数据库的参数介绍:

    • image.png

      使用git进行版本控制

  • 初始化git init

  • 把目前文件夹下的所有都备份git add .
  • 备份git commit
    • 遇到问题:image.png
  • git commit后出现改动日志,应该怎么做才能commit?
    • 编辑日志,在最底行输入commit,保存退出?好像可以image.png
  • git checkoutimage.pngimage.png
    • ls看图,已经回到了原来的文件结构

  • python3 -m pydoc filename可以生成filename.py的帮助手册:image.png
  • python3 -m pydoc -w main
    • 生成main.py的网页帮助文件
    • 帮助文件的名称就是main.html
  • 文件的注释描述会自动生成在文件的帮助文件中:image.pngimage.png

Python是动态类型的语言

  • 动态类型,即类型是动态的
  • image.png
  • 变量a,既可以是数字,也可以是字符串
  • 数字和字符串这两种类型,在内存里的存在形式是不同的:
    • 数字是转换成二进制形式,储存在内存中
    • 字符串是把字符串中的每个字符的ascii值储存在内存中
  • image.png
  • input获得的类型是字符串

不同类型的数据是如何储存的?

  • 字符串的赋值过程:

    • 在内存中分配一块空间,给字符串内容
    • 在空间内放上字符串
    • 将字符串的首个字符的地址
    • 返回给变量名称
    • 对于同一个字符、数字,不论变量名是什么,其地址是同一个吗?
      • 看起来是的:image.png

        eval是一个功能强大的函数

  • image.png

  • image.png

什么是补码系统?


如何整除?

  • /除,得到浮点数
  • //商,得到整型
  • image.png
  • divmod()同时进行除和取余,得到一个元组:image.png

    struct是什么命令?

  • struct.pack('i', 123)把123编码成4字节有符号整型变量image.png

    • i,integer,代表4字节有符号的整型变量
    • 大括号

有理数和无理数

无理数是无限不循环小数,无法写成两个整数之比,rarional number
有理数包含有限小数和无限循环小数,irrational number
有理数和无理数统称为实数,Real
分子numberator,分母denominator

  • -47e-2是-47×10-2
    • image.png

      python中的数值

      | 类型 | 描述 | 是否可变类型 | 举例 | | —- | —- | —- | —- | | 整型 | int | 否? | 123 | | 浮点型 | float | 否? | 1.23 | | 分数类型 | Faction | 是 | Faction(1,0) | | 精确十进制 | Decimal | 是 | Decimal(“0.1”) | | 复数 | complex | 是 | (1,-1j) |

python打开文件工作流程

  • f = open("filename.***")打开文件
  • f.read()读取文件
  • f.close()关闭文件;
  • 文件流打开后,python会一直留着文件流,如果只打开不关闭,内存会不够

    什么叫序列化?反序列化?

  • 序列化:我们把数据以字节流的方式储存在各个地方(内存、文件、数据库)

  • 反序列化:读取字节流,转化为我们需要的内容

    ls命令详解https://www.runoob.com/linux/linux-comm-ls.html

  • ls即list files

  • 直接ls,列出当前目录下的所有文件名称
  • ls -l,除了文件名称,同时将文件形态等详细信息列出
  • ls -a,显示所有文件及目录

sys.argv的用法

  • 是一个从外部环境获取参数的桥梁
  • 从外部获取的参数可以是多个,即获得的参数是一个列表
  • 即可以将sys.argv看做一个列表
  • 那么就能通过sys.argv[*]来提取列表中的内容
  • sys.argv[0]代表的是程序本身,如图:image.png
    • 通过:w|!python3 %运行程序:image.png
    • 得到文件本身名称t.py
  • sys.arg[1]代表第一个参数,修改t.py为sys.arg[1],在命令行中输入python3 t.py 123,得到在命令行中给到的第一个参数123:image.png

    安装tmux

  • brew install tmux安装

  • tmux -V检查是否安装成功及版本

    what is self?

  • image.png

  • 一般来说成员函数的第一个参数都是self
    • 成员函数:类的定义中自带的函数
  • 看函数是内建的(build-in)还是属于某个类的

    列表的extend()append()

  • image.png

  • extend是在现有列表尾部追加另个列表
  • append是追加具体的元素

    列表的赋值、潜拷贝、深拷贝

  • 浅拷贝:

    • 整体上变量拥有自己的地址
    • 但内部元素地址仍旧指向原地址
    • image.png
  • 深拷贝

    • 变量拥有自己的空间和地址
    • 内部元素也有自己的空间和地址
    • image.png

      如何实现字符串倒序?

  • 不支持reverse

  • 可以用str[::-1]切片来实现
  • image.png

    如何输出倒数索引

  • str.index('0')-len(str)

    容器总结:

  • 序列:

    • 字符串-不可变
    • 元组-不可变
    • 列表-可变
    • 字节序列-不可变
  • 集合类:
    • set集合-可变
    • frozenset冰封集合-不可变
  • 字典类
    • 字典dic-可变
  • 总结: | 类型 | 是否可变 | 是否有序 | 举例 | 描述 | | —- | —- | —- | —- | —- | | 字符串 | 否 | 是 | ‘neo’ | string | | 元组 | 否 | 是 | (n,e,o) | tuple | | 列表 | 是 | 是 | [1,2,3][‘a’,’b’]list(1,2,3) | list | | 字节序列 | 否 | 是 | b’neo’ | bytes | | 集合 | 是 | 否 | {1,2,3,’neo’} | set 不可以以列表为元素 | | 不可变集合 | 否 | 否 | frozenset{[1,2,3]} | frozenset | | 字典 | 是 | 否 | {‘name’=’neo’,’age’=22} | dict |

常用单词

instance 实例

break与continue的区别: