安装pip包
在Jupyter环境中安装pip包
为了方便使用,我们一般会选择将Jupyter的内核切换为某个特定的虚拟Python环境,切换后,Jupyter的Python命令会按照新环境运行,但是安装软件包不会默认安装到当前环境(而是base环境)
直接使用下面的命令安装会安装在base环境中
1
!pip install xxx
如果想要安装在当前运行环境中,可以使用下面的命令
1
2import sys
!{sys.executable} -m pip install xxx
凡事预则立,不预则废
__init__.py文件,将其编译为包在运行的第一个文件中添加IDEA项目的根目录作为搜索路径
这里的根目录最好是绝对路径
1 | import sys |
如果是想使用相对路径,从而方便移植也行,但需要获取当前文件的文件路径,然后从当前文件与根目录的关系解析出根目录
1 | import os |
其他的和在IDEA中运行一样,需要添加的库加上__init__.py即可
OrderedDict 是 Python 标准库中的一个类,它位于 collections 模块下OrderedDict 能够记住元素插入的顺序,在迭代时,元素会按照插入的先后顺序被返回OrderedDict 类对象的主要特点有:OrderedDict 包含相同内容,但元素插入顺序不同,它们会被视为不相等move_to_end() 方法将元素移动到开头或末尾OrderedDict 的一些常见操作示例: 1 | from collections import OrderedDict |
OrderedDict 仍然有其独特优势:OrderedDict 可以更清晰地表达代码对顺序的依赖move_to_end()、popitem(last=False) 等,且这两个函数都可以通过 last 参数指定是操作第一个还是最后一个自定义的一个有用的Python方法
1 | def get_top_k_indexes_of_list(target_list, k, is_max=True, min_value=None): |
1 | def get_elements_from_list(target_list, indexes): |
在 Python 里,functools 模块中的 partial 函数能够用来创建新函数,这些新函数是对现有函数部分参数预先赋值后的版本
借助这种方式,能简化函数调用,让代码更为简洁,常用在一些较为专业的底层框架中
函数形式:
1 | from functools import partial |
func 代表原函数args 和 kwargs 分别是要预先设置的位置参数和关键字参数new_func 时,只需传入剩余未预先设置的参数就行假设存在一个加法函数 add(a, b),现在要创建一个专门用于加 10 的新函数:
1 | from functools import partial |
在处理关键字参数 Demo:
1 | def power(base, exponent): |
参数顺序问题 :使用 partial 固定参数时,参数是按照位置依次绑定的
partial(func, 10) 会把 10 绑定到 func 的第一个参数上参数覆盖 :如果预先设置的参数在新函数调用时又被传入了新值,那么新传入的值会覆盖预先设置的值
1 | add_ten = partial(add, 10) |
函数属性保留 :通过 partial 创建的新函数会保留原函数的一些属性
__name__ 和 __doc__ 等函数属性还在使用 partial 和 lambda 都能实现参数固定的效果,但它们之间也有区别:
1 | # 使用 partial |
partial 函数在代码简洁性上表现更优,并且能够保留原函数的元信息lambda 表达式则更为灵活,可以实现更复杂的逻辑Jupyter notebook默认是不能跨机器使用的,只能使用localhost访问,本文讲述了让其能跨机器访问的方法
1 | jupyter notebook --generate-config |
* 如果是`root`用户可能会存在问题,按照提示操作即可
1 | jupyter notebook password |
* 按照提示输入密码,这就是以后在远程访问时使用的密码
* 生成的秘钥在`~/.jupyter/jupyter_notebook_config.json`下
1 | vim jupyter_notebook_config.py |
1 | c.NotebookApp.ip='*' # 这里可以写成本机的公网ip,或者是局域网ip |
有时候Linux系统重启或者有修改后会造成时区被修改,默认一般是UTC时间,有时候会变成CST时间
在阿里云主机扩展后出现过一次,造成了Logstash 使用JDBC连接数据库时读取报错:大概是JavaLang::IllegalArgumentException: HOUR_OF_DAY: 2 -> 3这样的错
1 | # 修改时区命令: |
重启后继续运行之前出错的程序,成功解决问题
在连接mysql-connector时加上一个时区参数
以logstash为例子
在mysql.config中修改连接语句原来为(连接到名称为”docker“的数据库,但是没有指定参数)
1 | jdbc:mysql://localhost:3306/docker |
修改后连接语句为(制定参数为UTC)
1 | jdbc:mysql://localhost:3306/docker?serverTimezone=UTC |
注意,这种方式修改后我的系统时区可为任意的,比如我的系统时区就一直为CST
Linux Shell 脚本中,exec 命令用于在当前 shell 进程中执行指定的命令,而不是启动一个新的子进程
exec 常常用来替换当前 shell 进程,或者重定向文件描述符
exec 基本语法如下:
1 | exec 命令 [参数...] |
假如在脚本中写:
1 | #!/bin/bash |
exec 也常用于重定向输入输出,不会启动新进程,而是改变当前 shell 的文件描述符。例如:
将标准输出重定向到文件:
1 | exec > output.txt |
将标准输入重定向为某个文件:
1 | exec < input.txt |
关闭文件描述符:
1 | # 打开一个文件用于读取,赋予文件描述符3 |
别名创建命令
1 | alias 别名="原命令" |
常用别名举例:
1 | # 创建 ll 别名,替代 ls -l |
创建别名后,直接使用别名即可实现与原命令同等效果
1 | # 输入 ll,相当于执行 ls -l |
1 | # 查看所有别名 |
以上命令创建的别名是临时的,重新启动终端后会消失,为了长久保留别名,可通过修改配置文件实现
编辑配置文件 :
1 | # 用 vim 打开配置文件(适用于 bash 终端) |
添加别名定义(在文件末尾添加类似以下内容:):
1 | # 常用文件列表别名 |
1 | # 安全删除(删除前询问确认) |
单引号 ':不解析变量,适合直接替换命令
双引号 ":会解析变量,适合需要动态内容的别名(不常用)
别名优先级高于原始命令,若要执行原始命令,可使用 \[原命令名](比如 \ls)
1 | \命令名 # 例如:\ls |
不要使用系统已有命令作为别名,否则会覆盖原命令
本文介绍Linux下find命令的使用方法
find命令用于在给定目录下查找符合给定条件的文件
用法:
1 | Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] |
常用的用法:
1 | find path -option [ -print ] [ -exec -ok command ] {} \; |
实例1:
1 | find . -name "*a*.py" -exec cat {} \; | grep test |
*a*.py的文件找出来,并输出其中含有”test”的行.对应path参数,代表搜索路径为当前文件夹, 默认会递归搜索-name "*a*.py"对应选项,指出找文件的筛选条件-exec cat {} \; | grep test指明找到文件后需要执行的操作,{}用于表示前面被固定下来的接受参数, 由于{}后面必须使用分号;,而命令行中分号需要转义字符转义,所以就是\;{} \;中间必须空一格,且{} \;中间不能加任何字符或命令等示例2:
1 | find . -maxdepth 1 -name "test*.py" -exec cat {} \;| grep test |
1 | find path -option [ -print ] [ -exec -ok command ] {} \; |
-print: find命令将匹配的文件输出到标准输出-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行-name: 按照文件名查找文件-perm: 按照文件权限来查找文件-prune: 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略-user: 按照文件属主来查找文件-group: 按照文件所属的组来查找文件-mtime -n +n: 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项-nogroup: 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在-nouser: 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在-newer file1 ! file2: 查找更改时间比文件file1新但比文件file2旧的文件-type: 查找某一类型的文件| 参数 | 文件类型 |
|---|---|
| d | 目录 |
| c | 字符设备文件 |
| p | 管道文件 |
| f | 普通文件 |
| l | 符号链接文件 |
| b | 块设备文件 |