存档

‘python’ 标签的文章

博客升级版本了

October 20th, 2013 1 条评论

Google将Python 2.5运行时、Master/Slave存储均标记为Deprecated状态很久了,而且GAE Python SDK在1.7.*之后就支持Python 2.7的环境,看来Google逼迫我升级程序。

为了使用Python 2.7,还必须使用HRD存储复制方式 为此我不得不新创建一个应用名称,并将之前的数据迁移过来。

(..More)

python nslookup批量查询脚本

March 22nd, 2011 17 条评论

我们有时在使用电脑时,需要批量获取某一批域名对应的IP地址,如果一个个分别查询,那就太费时间了。比如我们想要获取Youtube的视频地址,Youtube视频地址域名有很强的规律性,都是类似v*.lscache*.c.youtube.com这样的,使用python编写一个小脚本程序,将会为我们节省很多时间。

在一般情况下,我们可以先把需要查询的地址放在一个文本文件中,通过依次查询,就能获取对应IP地址。以下以查询hosts文件(删去前注后)为例:

from socket import getaddrinfo
f=open('data.txt','rb')
data=f.read()
f.close()
data=data.split('\r\n')
PORT = 80
for d in data:
    addr = d.split(' ')[1]
    print addr,
    ipaddr = getaddrinfo(addr,PORT)
    print ipaddr[1][4][0]
    line = str(ipaddr[1][4][0]) + ' ' + addr + '\n\r'
    output = open('data1.txt', 'a')
    output.write(line)
    output.close()

Python实现字符串全角半角转换

October 18th, 2010 15 条评论

全角字符unicode编码范围65281~65374 (十六进制 0xFF01 ~ 0xFF5E),半角字符unicode编码范围33~126 (十六进制 0x21~ 0x7E)。空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)

而且除空格外,全角/半角按unicode编码排序在顺序上是对应的所以可以直接通过用+-法来处理非空格数据,对空格单独处理。

全角转半角

def strQ2B(ustring):
    """把字符串全角转半角"""
    rstring = ""
    for uchar in ustring:
        inside_code=ord(uchar)
        if inside_code==0x3000:
            inside_code=0x0020
        else:
            inside_code-=0xfee0
        if inside_code<0x0020 or inside_code>0x7e:      #转完之后不是半角字符则返回原来的字符
            rstring += uchar
        rstring += unichr(inside_code)
    return rstring

(..More)

Datetime--Python的基本日期时间类型

July 5th, 2010 45 条评论

最近在学习Google App Engine日期时间属性时,尝试对Micolog这个基于Google App Engine的Blog后台的评论做了一个简单的修改页面,这样就可以使我们省下了去App Engine的后台去搜寻相关数据库再做修改的时间。编辑代码的过程倒是基本简单,新建一个编辑评论的页面(comment.html),再到admin.py中加入相关代码就可以了。不过,这个过程中倒是遇到一个小问题,python提交时间更新时会抛出一个异常来:

BadValueError: Property date must be a datetime

解决办法倒是很简单,将时间格式化成Datetime类型即可。

比如说:我在模板中对时间格式化为{{comment.date|datetz:"Y-m-d H:i:s"}}(如:2010-07-05-20:00:12这样的形式),那么在程序代码中可以这样写做:

comment.date=datetime.strptime(commentdate,"%Y-%m-%d %H:%M:%S")

当然其他类型的格式化都是可取的。由于Python中对时间进行格式化的相关字符与Django模板中time过滤器所用的格式字符串略有区别,下面就分别对其进行简单介绍,希望对你有所帮助。

(..More)

Using Google App Engine DoS Protection Service

June 1st, 2010 13 条评论

 

经过我近一段时间的观察,发现自己的网站经常有人使用扫描工具进行漏洞检查,一天下来错误日志都好几十次,我实在是看不下某人的这种行为了!好吧,今天就屏蔽掉你的访问,让我在日志中再也看不到你吧!

幸好某人这个漏洞扫描是使用google 二级域名来访问的,这样就让我有机会使用app engine自带的防dos攻击的方法来屏蔽了。

按照Google文档的帮助,直接在应用的根目录下建立dos.yaml文件,在里面填写如下类似的信息即可

blacklist:
- subnet: 1.2.3.4
  description: a single IP address
- subnet: 1.2.3.4/24
  description: an IPv4 subnet
- subnet: abcd::123:4567
  description: an IPv6 address
- subnet: abcd::123:4567/48
  description: an IPv6 subnet

这种方法还是很有效果的,其中的subnet项可以指定任意合法的IPv4和IPv6地址格式,你既可以使用特定的单IP,也可以指定一个IP段,description项为你在appengine后台管理项看到的内容。

上传方法很简单,你可以使用appcfg.py update直接上传整个项目,这是dos.yaml也会一同上传更新。或者直接使用appcfg.py update_dos命令来单独上传这一文件。

下面是某一IP扫描本站的部分日志:

(..More)

Appstats for Python

April 25th, 2010 16 条评论

前段时间在Google App Engine官方博客上看到app_engine更新了关于“Application profile with python & java appengine  and Appstats”的文章 Easy Performance Profiling with Appstats ,目前Google App Engine文档中已有英文原文。

注:Appstats是一个可视化的性能分析工具,是大名鼎鼎的Python作者Guido写的,具体内容请参考Appstats

Python的SDK包含了一套叫做Appstats的用于衡量你的应用程序性能的工具。 Appstats与您的Web应用框架集成以记录事件,并提供一个基于Web的管理界面用于浏览统计.

安装事件记录器(Event Recorder)

为记录Web请求的数据,每个请求句柄必须调用Appstats。这里有两种很容易的方法来将Appstats添加到你的处理程序代码中。

  • 一个工作在任何WSGI web应用框架(包括webapp)下的run_wsgi_app()函数(在google.appengine.ext.webapp.util包中)扩展
  • 一个Django的Web应用框架的“中间件”类

通过run_wsgi_app()函数使用Appstats

为了在一个WSGI兼容的框架(如webapp应用),你必须使用run_wsgi_app()函数来调用您的请求处理程序的脚本应用。举个例子:你可以使用类似于下面代码创建一个Webapp应用的应用实例,并运行它:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

application = webapp.WSGIApplication([('/', MainPage),
                                      ('/newentry', NewEntry),
                                      ('/editentry', EditEntry),
                                      ('/deleteentry', DeleteEntry),
                                     ],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

如果你使用另外一种方法来调用WSGI应用程序,(如wsgiref.handlers.CGIHandler),你必须修改你的处理程序都使用run_wsgi_app()来使用Appstats。

(..More)

Micolog使用Windows Live Writer自定义发布时间

March 16th, 2010 40 条评论

       利用Windows Live Writer发表文章时,我们可以在发布栏上看到有自定义发布时间的按钮,但是在一般情况下,我们自定义的时间并不能产生效果,因为这个自定义的时间序列并没有传递。如果我们在RPC传递中增加发布时间的属性,那么自定义发布时间就能成功。这个自定义的时间就会覆盖掉自动生成的当前时间。传递给api_rpc.py的struct里就有一个dateCreated的值,它是这样的格式:YYYYMMDDTHH:mm:ssZ,如20091118T12:44:46Z 。在api_rpc.py里面处理一下这个值并赋值给entry里的date即可。代码如下,有中文注释的即为修改的行,很容易找到在哪里加入:

(..More)

重新安装python2.5

September 12th, 2009 9 条评论

唉,最近安了个python2.6,导致我在本地无法打开micolog程序,无论打开那个总是提示“HTTP 500内部服务器错误”

网站无法显示该页面

(..More)

python用xmlrpc更新wordpress的一个实例

September 12th, 2009 1 条评论
import xmlrpclib
blog_username = 'user'
blog_password = 'passwd'
blog_url = 'http://example.com/xmlrpc.php'
have_tags = True
server = xmlrpclib.ServerProxy(blog_url)
push=0
post['title'] = 'Subject'
post['wp_slug'] = 'Slug'

(..More)

最短路径只Dijkstra算法python实现

September 12th, 2009 0 条评论
# coding: utf-8

#shortest_path.py

## 最短路径

## 使用Dijkstra算法找给定结点到图上其它各点的最短路径

##

##参数g是被遍历的图, A是给定结点的名字

##Dijkstra算法的思想是:

##起初,只有一个结点A,此结点到自己的最短路径确定,值为0

##下一步,扩展此结点的所有相邻结点,形成集合{}。

(..More)