(译) PEP 333 - Python Web Server Gateway Interface v1.0 中文版

PEP 333 - Python Web Server Gateway Interface v1.0 中文版

============

翻译自 Python Web Server Gateway Interface v1.0 PEP 333 - Python Web Server Gateway Interface v1.0

译者的话

Python基础学完后,免不了要深入到Python的主流Web框架(Python科学计算那部分暂时用不到可以先不管),在学习Flask这些框架的过程中发现它们的底层都是WSGI协议,故决定先啃下WSGI,鉴于目前网上几乎没有(完整的)WSGI中文版,于是干脆自己翻译,这样也有助于加深自己的理解,也能够帮助到一些初学者。

内容

  • 序言
  • 摘要
  • 基本原理及目标
  • 规范概述
    • 应用程序/框架 端
    • 服务器/网关 端 ...
more ...

(译) 几分钟学习一门编程语言之Python篇 (最新版)

几分钟学习一门编程语言之Python篇 (最新版)

翻译自 Learn X in Y Minutes: Where X = Python Learn X in Y Minutes: Where X = Python

Python由Guido Van Rossum发明于90年代初期,是当今最流行的编程语言之一,我深深被它清晰简洁的语法所折服并从此爱上了它。Python的代码之简洁,几乎就是可执行的伪代码。

若能提供给我们反馈,将非常欢迎!你可以通过推特@louiedinh或邮箱louiedinh AT gmail来联系我。

请注意:本文是专门针对Python 2.7的,但应该同样也适用于Python 2.x的。至于 Python 3.x,请阅读我们最新的指南 Learn X in Y ...

more ...

(译) 迭代器和生成器

迭代器和生成器

翻译自:5.Iterators & Generators 5.Iterators & Generators

5.1. 迭代器(Iterators)

首先,我们用for循环来循环遍历一个列表(list)。

>>> for i in [1, 2, 3, 4]:
...     print i,
...
1
2
3
4

假如我们将for循环用在一个字符串中,它将会遍历字符串的每一个字符。

>>> for c in "python":
...     print c
...
p
y
t
h
o
n

假如我们将for循环用在一个字典中,它将遍历字典的每一个 ...

more ...

(译) WSGI基础知识

WSGI 基础知识

翻译自Basics of WSGI http://agiliq.com/blog/2013/07/basics-wsgi/

在这篇文章里,我们将会写一个web app,这个app它会服务一些url。我们将不会使用任何Python框架来写它。我们只是去说明一下这些机制的背后原理。

在开始写这个web app之前,我们先来澄清几个下文将要用到的术语。

  • Web服务器(Web Server): 当我们说Web 服务器时,我们指的是软件,而不是那些存储你代码的硬件机器。这个服务器会接收从客户端(Web浏览器)发送过来的请求并返回一个响应(response)。Web服务器本身并不创建响应,它只负责返回响应。所以,Web服务器就需要同Web应用程序交流,因为Web应用程序它能产生响应。

  • Web应用程序(Web Application):Web服务器从它这里拿到响应。Web Application的职责就是根据url来创建响应并将响应传回给Web服务器。然后Web服务器就只是返回这个响应到客户端而已。

  • WSGI: WSGI是一个接口,它只是一份规范或者说是一系列的规则。WSIG不是一个软件。

WSGI会引起人们的注意是因为Web服务器需要跟Web应用程序通信 ...

more ...

Python删除文件夹下所有特定类型文件

写了个递归删除一个或多个文件夹下所有bmp图片的脚本:

import os

def del_bmp(root_dir="C:\temp"):
    """
    @Function: Delete all bmp image file in root_dir and its subdirectory 
    @root_dir: The target directory 
    """
    file_list = os.listdir(root_dir)
    for f in file_list:
        file_path = os.path.join(root_dir, f)
        if os.path.isfile(file_path):
            if f.endswith(".BMP") or f.endswith ...
more ...

Python中range和xrange区别

所有Python的学习者都会遇到这个问题,range和xrange都可以是列表生成器,它们有什么区别?

range

函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。range一上来就直接开辟一大块内存,返回一个完整list对象。

xrange

函数说明:用法与range完全相同,所不同的是生成的不是一个list对象,而是一个生成器,在每次调用时返回其中的一个值。

所以显而易见,除非你真的是想一次性返回整个列表,否则,在循环中,xrange的性能要大大优于range,特别是列表很大或者内存吃紧的时候,所以,循环中请尽量用xrange.

more ...

解决Python往文件中插入多行字符串时的一个小问题

用Apache搭了一个最简单的Http服务器,每一次自动化脚本跑完之后要往http服务器的首页insert一条记录。
截图:
ee-auto-report

往Html源文件插入一行的代码如下所示:

def modify_index_html(apache_dir, log_path):
    """
    Function:Update the index.html to reflect the run result to the overall report
    @apache_dir: Apache http server folder:"C:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\htdocs\\"
    @log_path: the path to the log generated in this run
    """
    logger.info("Updating ...
more ...

ConfigParser模块解析配置文件

  1. 解析配置文件很常见,Python官方的库ConfigParser就自带了这功能。
  2. 配置文件由多个section构成,每个section下面有多个配置项,配置项的格式为:key=value

假设有一个配置文件为config.conf,格式如下,有两个section,我们来利用ConfigParser模块对其做解析:

[db]
db_host=localhost
db_port=3306
db_user=root
db_pass=toor
[concurrent]
thread=10
processor=20

解析的Python代码如下,比较简单,10分钟就能学完。

import ConfigParser

conf = ConfigParser.ConfigParser()
conf.read("/Users/Heros/config.conf")
all_sections = conf.sections()                       # 返回['db', 'concurrent']
db_options = conf.options("db ...
more ...

Logging模块日志相关

就像Java中有log4j一样,Python也有自己的日志模块Logging。Logging模块提供不同的日志级别
pass

more ...

Shutil模块文件操作

Python文件操作有os.path,用了一段时间发现Shutil强大许多。
pass

more ...