Python小抄

下面是我积累的Python 实用小技巧。会根据经验增长持续更新,给自己也给可能需要的人做个备份。

从文件中读取数据

文件类提供了三种方法读取文本文件的内容,分别是:

f.read(size)

返回一个字符串,内容为长度为size的文本。参数size可以省略。如果省略size参数,则表示读取文件所有内容,作为一个字符串返回

f.readline()

返回一个字符串,内容为文件当前一行的文本。

f.readlines()

返回一个列表,列表的数据项为一行的文本[linel, line2, ···,lineN] 。再通过循环操作可以逐行访问列表中每一行的内容。

mode 解释
r 以只读方式打开
w 以写方式打开一个文件,当这个文件存在时,覆盖原来的内容。当这个文件不存在时,创建这个文件
x 创建一个新文件,以写方式打开,当文件已存在, 报错FileExistsError
a 以写方式打开,写人内容追加在文件的末尾
b 表示二进制文件,添加在其他控制字符后
t 表示文本文件,默认值
+ 以修改方式打开,支持读写

设置工作目录

  • 获取当前工作目录:
import os
os.getcwd(' ')    
  • 设置工作目录
os.chdir(' ') 

设置Jupyter Notebook图片输出格式

  • SVG格式

  • Jupyter Notebook魔术命令

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

让图片说中文

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

Jupyter Notebook 更换主题背景

长时间编程会导致眼睛疲劳,深色编程背景不可或缺,下面的代码提供了Jupyter Notebook 的深色主题。直接在Anaconda Prompt中输入就好:

jt -t monokai -f roboto -nf robotosans -tf robotosans -N -T -cellw 70% -dfs 10 -ofs 10

下面的主题更适合输出成网页:

jt -t grade3

异常处理

a=3
b=2
for i in range(5):
    try:
        a = a - 1
        c=b/a
        print(c)

    except Exception as e:
        print(e)#输出异常行为名称
1.0
2.0
division by zero
-2.0
-1.0

Anaconda 或Python 从本地离线安装第三方包

很多时候使用conda installpip install 都无法安装包。只好使用本地安装的方法去安装Github开发版。这很像R语言的devtools::install_local函数。下面是具体的做法。

首先确保已将Python添加入环境变量。由于我的电脑上使用的Anaconda而不是Python,我添加的是对应的Anaconda3文件夹(包含python.exe的文件夹)

  1. 首先从github上clone或者直接下载zip文件并解压到目录A。

  2. 目录A下有setup等文件:

  1. 如果是windows系统,在目录A下,在未选择任何文件的情况下(可以先左键单击空白处)按住Shift的同时在空白处单击右键,调出菜单。此时点击【在此处打开命令窗口】的选项。

  2. 在弹出的命令窗口中输入:

python setup.py install
  1. 安装完成!

如果同时安装了Anaconda 和Python可能会出问题。因为Anaconda 自带了一个Python。如果只在一个路径中安装的话另一个仍是没有安装的。

在R Studio中运行Python

Python和R都是数据科学的必备工具。熟悉R的人都知道,R Studio是一款非常出色的R语言IDE。但一直以来,Python和R都是割裂的。reticulate包能够为我们提供一些Python的调用功能。包括两个语言中对象的相互转化。

其中,reticulate::repl_python()能够实现在R Studio Console中运行Python代码。但是目前这个函数无法显示Python运行出的图片。如果想退出Python环境回到R,则输入exit

其次,reticulate还能够支持Python代码在R Markdown中的编译。这个功能目前似乎还不够完善,至少在我的电脑上,很多时候无法成功编译。

目前谢益辉xfun包的convert_ipynb函数可以将后缀为.ipynb的文件完美转化为.Rmd文件,用法如下:

nb_rmd = rmarkdown:::convert_ipynb(nb_file)
xfun::file_string(nb_rmd)
rmarkdown:::convert_ipynb("XXX.ipynb",
                          output = "YYY.Rmd")

如果reticulate有一天功能足够完善,可以用它支持的knitr编译,从而替代不能控制输出格式的Jupyter Notebook。那么R Studio也能成为一款非常出色的Python IDE。