Posts List

python 杂项记录

python 时间类型操作

经常碰到需要对日期时间的字符串操作,查了又经常忘记,所以写到这里当作自己的笔记。 datetime模块里有几个经常用到类, datetime, date, time date 日期类 (年,月,日) time 时间类 (小时, 分钟, 秒, 微秒) datetime 日期 + 时间 datetime类 从字符串到datetime strptime函数 datetime.datetime.strptime('06-05-2010', "%d-%m-%Y").date() datetime.date(2010, 05, 06) 第三方库 dateutil from dateutil import parser dt = parser.parse("Aug 28 1999 12:00AM") 可以通过pip命令安装dateutil安装 pip install python-dateutil 格式化 意义 例子 %d Day of the month as a zero-padded decimal number.前面填充0的日期 比如00, 01, …, 31 %m Month as a zero-padded decimal number.

python exec的使用过程中碰到的坑

python的exec可以直接运行一个文件中的python脚本,或者一个字符串里的python语句。为什么不直接调用这个文件,或者语句呢?一个典型的场景就是我们要运行的python脚本存在数据库中,当然也可以把文件内容从数据库中读取出来,生成临时文件,再运行。但是如果使用exec,就可以on fly的运行python脚本了。 exec 语法

使用requests的网络爬虫

requests 帮助主页: http://docs.python-requests.org/en/latest/user/quickstart/ 1. requests的json支持 requests本身自带了json支持,不需要额外的json库来做转换。比如得到的内容是json格式,可以使用 import requests r = requests.get('https://api.github.com/events') r.json() [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/... 2. form-encoded data requests库可以简单的将dict类型传递给get或post方法的data参数就可以实现自动实现传递form-encoded参数。但是,如果参数本身是一个数组的话,比如网站需要传下面的POST参数: 可以看出来,amarket和coupon_descr都是数组类型,有多个数值,这个时候需要通过将list类型赋值给对应的dict key,代码如下: data = {"is_funda_search":"0", "fundavolume":"100", "amarket[]":["sh", "sz"], "coupon_descr[]": ["+3.0%", "+3.2%", "+3.5%", "+4.0%", "other"], "rp":"50", "maturity":""} content = s.post(url, data=data)

gevent安装

gevent的安装过程: 1. 安装greenlet依赖 sudo pip install greenlet 2. 安装gevent sudo pip install gevent 安装过程中,碰到下面错误: gevent/gevent.core.c:9:22: fatal error: pyconfig.h: No such file or directory #include "pyconfig.h" ^ compilation terminated. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Cleaning up... Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/gevent/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-11RdgV-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/gevent Storing debug log for failure in /root/.

python 相对路径文件的操作

python项目中,如果pyton代码需要访问某个外部文件,该文件位于代码文件的某个相对路径位置,我们可以在代码中使用相对路径来访问该文件。 比如图中的代码结构: sample.py文件中,如果要访问配置文件server.ini文件,就可以用 “../conf/server.ini”来进行访问。 但是经常的问题是,该python文件又被别的目录的python文件import引用, 此时相对路径就会出错。这是因为此时相对路径是基于当前运行脚本的路径来计算的, 如果被引用的python文件和调用文件不在同一个目录,则相对路径就会失效。 比如,我们的例子中, sample.py文件内容如下: import ConfigParser import os def read_conf(): file_path = '../conf/server.ini' config = ConfigParser.ConfigParser() config.read(file_path) return config.get('conf', 'value') if __name__ == '__main__': print read_conf() main.py内容如下: from utils.sample import read_conf print read_conf() 比如上图中,如果main.py调用read_conf时就会发现server.ini文件找不到。问题就处在运行main.py时,当前路径是main.py所在的文件夹,而sample.py中使用的相对 路径基于该文件夹就会找错位置。解决办法是在sample.py中使用文件绝对路径来访问server.ini文件, 但是我们又要根据脚本存放的当前位置来获得运行时的路径。这个时候 我们就需要用到python中的 __file__变量, 该内置变量存放了本python文件的当前路径信息,根据该变量,我们可以os.path.dirname(__file__)得到相应文件 的绝对路径。 在sample.py中file_path变量做如下修改: file_path = '../conf/server.ini' --> file_path = os.path.join(os.path.dirname(__file__) + '/../conf/server.ini') 注意 路径前加 ‘/’,否则文件路径会不完整。 参考资料: http://stackoverflow.com/questions/918154/relative-paths-in-python http://stackoverflow.com/questions/1270951/python-how-to-refer-to-relative-paths-of-resources-when-working-with-code-repo ​