Python/Python 文本处理的编码
在 Python 3 中读写文件时,我们需要注意读取文件和写入文件时的数据格式,是 str 类型,还是 byte 类型。
在我看来,str 类型相当于 Java 中的字符流,是有一个编码的;而 byte 相当于 Java 中的字节流,是没有编码的。
先搞清楚几个概念:
在 Python 3 中读写文件时,我们需要注意读取文件和写入文件时的数据格式,是 str 类型,还是 byte 类型。
在我看来,str 类型相当于 Java 中的字符流,是有一个编码的;而 byte 相当于 Java 中的字节流,是没有编码的。
先搞清楚几个概念:
用 pip
管理工具安装库文件时,默认从国外的源下载。
导致安装库的时候,下载速度非常慢,切换成国内的镜像源,可以大大提升下载速度。
比较常用的国内镜像有:
阿里云 https://mirrors.aliyun.com/pypi/simple/
虽然现在 Tensorflow 2
已经发布一段时间了,但仍然有很多历史代码是基于 Tensorflow 1
的。
由于经常需要复现过去的论文的代码,需要使用 Tensorflow 1
的 GPU 版本 ,而我的服务器已经安装了 Tensorflow 2
的 GPU 版本。
而 Tensorflow 2
和 Tensorflow 1
的 GPU 版本需要的 CUDA 和 cudnn 版本都不一样。
下面来看看如何在一个同一个服务器上,安装不同版本的 Tensorflow GPU
版本。
基本在 Python 中,我们经常会看到 *
和 **
。这两个符号,一般在函数传参时使用。
下面来看下它们的具体作用。
有时在 PyCharm 运行代码的时候,会出现类似如下 pytest
的错误。
我使用 Anaconda 创建了一个 python2.7
的环境,然后安装 opencv: pip install opencv-python
。
出现 TypeError: 'NoneType' object is not iterable
错误。
完整错误信息如下:
基本思路
在 Jupyter Notebook 中运行 Python 代码时,如果使用了太多的内存,那么会报Memory Error
的错误。这表示前面的变量使用了太多的内存。
在有一次数据建模中,由于前面进行了很多数据处理的工作,创建了非常多临时的DataFrame
,运行到后面的代码时,前面大部分的变量都已经用不上了,但是它们还占据着内存,因此产生了内存不足的错误。
concurrent.futures
是 Python3.2 加入标准库的一个模块,它提供异步执行回调高层接口,是对线程池和进程池的进一步封装,让开发者可以使用统一的接口非常容易的使用线程池和进程池。
这个模块中有两个核心的类:ThreadPoolExecutor
(线程池)和ProcessPoolExecutor
(进程池)。
基本思路是,将DataFrame拆成若干组分,最后通过pandas.concat合并起结果
1 | def parallelize_dataframe(df, func, n_jobs=3, split_num=10): |
还可以使用tqdm
在处理数据时显示进度条。