Posts Tagged ‘python’

2010/01/19

其实 Python 中一般都是直接用 urllib.urlopen() 来抓取网页内容或者模拟登陆等操作,但是 GAE 出于安全考虑不可以用 urlopen 操作,取而代之的就是 urlfetch.fetch()。fetch() 函数、参数(via):

fetch(url, payload=None, method=GET, headers={}, allow_truncated=False, follow_redirects=True, deadline=None)

Python语言: GAE urlfetch登录人人
01 def login_renren(self):
02     login_url = ‘http://passport.renren.com/PLogin.do’
03     login_data = urllib.urlencode(
04         {
05          ‘domain’:‘renren.com’,
06          ‘email’:  renren_username,
07          ‘password’: renren_passwd,
08          ‘origURL’:‘http://home.renren.com/Home.do’,
09          })
10     result = urlfetch.fetch(
11         url = login_url,
12         payload = login_data,
13         method = urlfetch.POST,
14         headers = {‘Cookie’:make_cookie_header(cookie),
15                    ‘Content-Type’:‘application/x-www-form-urlencoded’,
16                    ‘User-Agent’:‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6′ },
17         follow_redirects = False)

继续学习 GAE。

Related posts

Tags: ,,,.
2009/10/20

第一次用代码编辑助手(Content Assistants)这类东西是 VC 上的 Visual Assist,俗称 VA,强大不是吹出来的。最近发现一篇 Eclipse 下针对 PyDev 的 CA 介绍,忍不住转载过来,全文在这里《PyDev for Eclipse 简介》,via:IBM developerWorks 中国。Eclipse 的 CA 看起来还是很强大的。

—————转载分界线——————

源代码编辑助手 (Content Assistants)

源代码编辑助手 (Content Assistants,以下简称 CA),顾名思义,即用于帮助开发者编辑源程序,它提供了诸多方便实用的功能,引导开发者进行高效快速的项目开发。

通过快捷键 Ctrl+1 可以激活 CA,它支持的功能如下:

PyDev

  1. Move import to global scope
  2. Create docstring
  3. Assign result to new local variable (or field)
  4. Assign parameters to attributes
  5. Surround code with try..except or try..finally

PyDev Extensions

  1. Make import for undefined token
  2. Ignore error
  3. Don’t analyze module

在安装 PyDev 时,PyDev 和 PyDev Extensions 包都已安装,所以 CA 的这几大功能现在都支持。首先,先介绍如何使用 PyDev 包含的 CA 功能。

  • PyDev 的 CA 功能
  1. Move import to global scope

以如下代码为例,将光标移至 import sys 后,启动快捷键 Ctrl+1 激活 CA,”Move import to global scope” 出现在标签中,按 Enter 应用此功能。如果不想应用该功能,可以按 Esc 键取消。

#!/usr/bin/python –u
sys.path.append(“./VirtualFS”)
import sys

应用该功能后,import sys 被成功移至全局范围内,消除了之前的错误。改变后的代码如下。

#!/usr/bin/python –u
import sys
sys.path.append(“./VirtualFS”)
  1. Create docstring

Create docstring 功能可以自动为函数添加参数注解。将光标移至如下代码行,启动快捷键Ctrl+1 激活 CA,标签栏中出现 ”Make docstring”。

def __init__(self, dbUser, dbPswd, dbHost):

按 Enter 应用该功能后,自动为该函数添加了参数注解。

def __init__(self, dbUser, dbPswd, dbHost):
		'''

		@param virtualOperator:
		@param database:
		@param hostname:
		@param workDir:
	'''
  1. Assign result to new local variable (or field)

CA 还提供一种功能能够将函数返回结果赋给新的内部变量。以函数 callMethod 为例,将光标移至 a.callMethod() 行激活 CA。

     def method (self, a):
	a.callMethod()

选择 ”Assign to field(self, callMethod)” 或者 ”Assign to local(callMethod)”,可以将a.callMethod() 结果赋给新的内部变量 self.callMethod,改变后的代码如下。

     def method (self, a):
	self.callMethod = a.callMethod()
  1. Assign parameters to attributes

在程序编辑过程中,如果需要把函数参数赋给变量,可以使用 CA 的 Assign parameters to attributes 功能自动完成这样的需求。将光标移至函数 m1 所在行,激活 CA。

    class Foo(object):
	Def m1(self, a, b):

在标签栏中选择 ”Assign parameters to attributes”,自动生成两行代码将参数 a,b 赋给同名变量。

class Foo(object):
	def m1(self, a, b):
		self.a = a
		self.b = b
  1. Surround code with try..except or try..finally

对可能产生异常的代码,要进行异常捕获,通常使用 try..except 或者 try..finally 语句来捕获异常。选中一段代码 print usage,激活 CA 的 ” Surround code with try..except or try..finally”功能,可以自动对 print usage 进行异常捕获。

 import sys
def method (self, usage):
	  try:
	      print usage
	  except:
	      raise

下面,再介绍 PyDev Extensions 包含的 CA 功能是如何被运用的。

  • PyDev Extension 的 CA 功能
  1. Make import for undefined token

以如下一段代码为例,xmlreader 未定义,语法分析出错。

     class Test:
	def method(self):
	     xmlreader

将鼠标移至出错行,启动快捷键 Ctrl+1 激活 CA,选择标签栏中的 ”Import xmlreader(xml.sax)”,自动生成一行代码 from xml.sax import xmlreader,语法错误消除。

from xml.sax import xmlreader
  class Test:
	def method(self):
	     xmlreader
  1. Ignore error

仍以上述代码为例,由于 xmlreader 没有被定义,包含语法错误,在这一行激活 CA,选择 ”UndefinedVariable”,语法错误被忽略,xmlreader 后自动生成一行注释标明 ”#@UndefinedVariable”。

  class Test:
	def method(self):
	     xmlreader #@UndefinedVariable
  1. Don’t analyze module

语法分析器可以帮助显示包含语法错误的代码,但在程序编辑过程中,有时候需要刻意取消对程序的语法分析,CA 的 Don’t analyze module 提供了这样的功能。

将光标移至程序第一行,激活 CA,选择 ”@PydevCodeAnalysisIgnore”,自动生成一行代码 ”#@ PydevCodeAnalysisIgnore”,忽略对程序体的语法分析。

#@PydevCodeAnalysisIgnore
   class Test:
	def method(self):
	     	     xmlreader
  1. Quick Outline

对特定的 Python 文件,Pydev Extensions 提供的 Quick Outline 能最简单快捷地获取该文件的组织结构,并能在该文件中方便地查询定位所需信息。

在 Pydev 透视图中,选择 Source -> Show Quick Outline,或者使用快捷键 Ctrl+O 启动该功能。

Python 文件的类、函数等组织架构便以树状形式被形象地展现出来。同时,Filter 提供了查询定位的功能,可以方便地查询所需信息并定位到相应的代码段。

图 8. Quick Outline

Quick Outline

  1. Globals Browser

Globals Browser 是 Pydev Extensions 提供的另外一种强大的查询定位功能。它可以查询定位整个工程内的一些定义和属性,包括:

    • 类定义
    • 方法定义
    • 全局变量
    • 类以及实例属性

通过三种方式可以启动该功能。

  • 在 Pydev 透视图中,从菜单栏中选择 Pydev -> Globals Browser。
  • 在Pydev 透视图中,工具栏有如下的一个小图标,鼠标移至该图标上方,显示 ”Pydev: Globals Browser” 标注。点击该图标按钮,可以启动 Globals Browser 功能。
  • 通过快捷键 Ctrl + Shift + T,可以快速启动 Globals Browser 功能。

在 Filter 中输入所要查询的定义、变量或者属性,Globals Browser 可以快速地定位到相应的代码段。

  1. Hierarchy View

当某个 python 文件包含多个类时,如何才能简单直观地了解各个类之间的依存关系?Hierarchy View 提供了这样的功能,它能将多个类之间的层次关系以树状结构直观地显示出来。

以一段 Python 代码为例,定义了 Super1, Super2, ToAnalyze 和 Sub1 四个类。在 Pydev透视图中,选择 Windows -> Show View -> Other,在弹出的 Show View 窗口中,选择 Pydev -> Hierarchy View。按快捷键 F4 激活 Hierarchy View,可以看到树状图中显示出了类间的层次关系。

图 12. 在 Hierarchy View 中显示类的层次关系

在 Hierarchy View 中显示类的层次关系

Hierarchy View 还支持以下四个功能:

  • 在层次图中,用鼠标单击某个类,图下方即显示出该类的方法。
  • 如果双击某个类、方法或者属性,则会调出源程序,进入对该类、方法或者属性的编辑状态。
  • 在 Hierarchy View 中,按住鼠标右键,并相左或向右移动鼠标,层次图则会相应地缩小或放大。
  • 在 Hierarchy View 中,按住鼠标左键移动鼠标,层次图则会被随意拖动到相应的位置。

———————–转载结束————————

Related posts

Tags: ,,,.
2009/10/09

其实就是《A Byte of Python》里面一个例子程序,拿来练练手而已,没啥技术含量。

打包压缩程序用的是 7-Zip,安装后安装目录里有一个命令行版的 7z.exe,添加压缩文件的参数是 a;自动删除旧备份文件的方法很山寨很暴力,直接 listdir 备份目录下的文件,然后删除第一个,也就是最旧的一个,凑合吧。

Python语言: Codee#7002
01 #Python 备份 Fx 配置并自动删除旧备份
02 import os
03 import time
04
05 source = r’C:\FxProfiles’
06 target_dir = r’C:\FxBackup’
07 target = target_dir + os.sep + time.strftime(‘%Y%m%d%H%M%S’) + ‘.zip’
08 newzip = time.strftime(‘%Y%m%d%H%M%S’) + ‘.zip’
09 zip_command = "7z a %s %s" % (target, ‘ ‘.join(source))
10 oldzip = os.listdir(target_dir)
11 if newzip > oldzip:
12     os.remove(target_dir + os.sep + oldzip[0])
13     print ‘Del OK’
14
15 if os.system(zip_command) == 0:
16     print ‘Successful backup to’, target
17 else:
18     print ‘Backup FAILED’

山寨之极!不过还是玩的不亦乐乎,Python 很有搞头。

Related posts

Tags: ,.