Python Dictionary tips

  • Constructing Dictionaries with Keyword Arguments,the simplest way to create a Dict.
dict(a=1, b=2, c=3) # returns {'a': 1, 'b': 2, 'c': 3}
  • Dicts to Lists.
dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = dict.keys() #return ['a', 'c', 'b']
values_list = dict.values() #return [1,2,3]
dict_as_list = dict.items() #return [('a', 1), ('b', 2), ('c', 3)]

via Constructing Dictionaries with Keyword Arguments

Python zip function

The built-in zip function can be used, well, to zip lists together. It returns a list of tuples, where the nth tuple contains the nth item from each of the passed in lists.

letters = ['a', 'b', 'c']
numbers = [1, 2, 3]
squares = [1, 4, 9]

zipped_list = zip(letters, numbers, squares)
# zipped_list contains [('a', 1, 1), ('b', 2, 4), ('c', 3, 9)]

via Combining Multiple Lists, Item by Item

Python 多线程爬虫

备忘。

队列模块使用步骤(via):

  1. 创建一个 Queue.Queue() 的实例,然后使用数据对它进行填充。
  2. 将经过填充数据的实例传递给线程类,后者是通过继承 threading.Thread 的方式创建的。
  3. 生成守护线程池。
  4. 每次从队列中取出一个项目,并使用该线程中的数据和 run 方法以执行相应的工作。
  5. 在完成这项工作之后,使用 queue.task_done() 函数向任务已经完成的队列发送一个信号。
  6. 对队列执行 join 操作,实际上意味着等到队列为空,再退出主程序。

其中 join() 方法说明:

保持阻塞状态,直到处理了队列中的所有项目为止。在将一个项目添加到该队列时,未完成的任务的总数就会增加。当使用者线程调用 task_done() 以表示检索了该项目、并完成了所有的工作时,那么未完成的任务的总数就会减少。当未完成的任务的总数减少到零时,join() 就会结束阻塞状态。

Simple SCP notes

SCP: Copies files over the network securely; uses ssh for data transfer, using the same authentication and providing the same security as ssh.

Using:

scp [-p] [-v] [-r] [[username@]host:] file_or_dir [[username@]host:]file_or_dir

  • Putting:

scp mydata.dat [email protected]:Newname.dat

scp -r FileFolder [email protected]:/home/

  • Gettiing:

scp [email protected]:remote.data /home/local.dat

scp -r [email protected]:FileFolder /home/

Weighted random choice

Python 带权重的随机选择。via

import random

def windex(lst):
    '''an attempt to make a random.choose() function that makes weighted choices
    accepts a list of tuples with the item and probability as a pair
    like: >>> x = [('one', 0.25), ('two', 0.25), ('three', 0.5)]
    >>> y=windex(x)'''

    n = random.uniform(0, 1)
    for item, weight in lst:
        if n < weight:
            break
        n = n - weight
    return item

Quickly and powerful

新系统的开发环境在 Mac 本地部署会很麻烦,所以就直接 ssh 到远程服务器就行修改操作;而 ssh 到服务器实施环境进行 coding 响应速度又跟不上,看着终端上字符一顿一顿的就焦急,配合 svn 快速而又安全的搞定。

本地 svn ci 代码到 svn 代码库,远程服务器 svn co 到实施环境,而后,就可以在本地进行 coding,完后 svn ci 提交代码,之后 ssh 到服务器实施环境 svn up 一下即可在实施环境部署最新代码。

通过 svn 代码库进行中间代码中转,这样 coding 的时候不受网络速度影响;通过 svn 又可以进行代码托管,保证代码安全,而且可以很方便的在实施环境切换、回滚代码版本。

唯一的一个小不足就是因为无法在本地进行 debug,有时候可能为了一个小问题 svn ci 好多次,代码库里会多好多个版本。

ImageMagick Notes

  • 尺寸缩放

convert -resize 640x960 input.jpg  output.jpg

convert -resize 75% input.jpg  output.jpg

  • 去除多余 Exif 等信息

convert -strip input.jpg output.jpg

  • 调节压缩比例

convert -quality 75% input.jpg output.jpg

Happy in life

及时行善,能帮别人的时候就伸手帮一把,对你来说是举手之劳,对别人就是暖心之举。

及时行乐,善待自己,不必要那么累。

py2exe notes

Python 2.6 以上版本报错:

error: MSVCP90.dll: No such file or directory

Python 2.5 及以下运行时需要的 runtime DLL 是 MSVCR71.dll,这个打包时候会自动包含进来;Py2.6 及以上运行时需要的 runtime DLL 是 MSVCR90.dll,这个需要手动加载。在 setup.py options 字典添加 “dll_excludes”: [“MSVCP90.dll”] 解决。via

几个 options 参数 via

  • optimize:2 => extra optimization
  • includes:list of module names to include
  • compressed:1 => create a compressed zipfile
  • bundle_files:1 => bundle everything, including the Python interpreter

application failed to initialize properly (0xc0000142) 应用程序正常初始化(0xc0000142)失败

在 setup.py data_files 添加 (“Microsoft.VC90.CRT”, [‘MSVCR90.dll’,’Microsoft.VC90.CRT.manifest’]),留意 Microsoft.VC90.CRT.manifest 只能有 msvcr90.dll。 [via](http://www.py2exe.org/index.cgi/Tutorial#Step521)

Yes I Can!

接下来的工作学习方向:

  1. iPhone/Android 开发。
  2. Python/PHP Web 开发。
  3. Web 前端尤其是 JavaScript 的学习。

谨记:

  • 多沟通,一个小时解决不了的问题就问,节省时间,提高效率。
  • 做事有计划。
  • 多写文档。