Sep 27

有一段日志,需要提取括号中的一些值,组成新文件.

spawn runmqsc dcllf.mqm
display queue('q_*') curdepth
end
5724-H72 (C) Copyright IBM Corp. 1994, 2005.  ALL RIGHTS RESERVED.
启动队列管理器 dcllf.mqm 的 MQSC。


     1 : display queue('q_*') curdepth
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_act)                  TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_control)              TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_module)               TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mo_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_1)                   TYPE(QLOCAL)
   CURDEPTH(11)                         
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_2)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_3)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_batch_1)                 TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_report)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_act)                         TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_old_mms)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_old_sms)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_route)                       TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_tp)                          TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_tp_provision)                TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mt_tp_msgid)                    TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_performance_test)               TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mo_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_1)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_2)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_3)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_log)                     TYPE(QLOCAL)
   CURDEPTH(6)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_report)                     TYPE(QLOCAL)
   CURDEPTH(51)                         
     2 : end
读取一个 MQSC 命令。
所有命令均无语法错误。
已处理所有的有效 MQSC 命令。

有人提供了这样一种办法

 

我觉得不优雅,应该有更好的办法,于是想到用正则. 主要涉及反向引用,非贪婪模式和多行匹配模式.

 

#!/usr/bin/env python3

import re
data = open('mqwatch.txt', 'r').read()
b = re.findall('QUEUE\((.*?)\).*?CURDEPTH\((\d+)\)', data, re.S)
x = ';'.join(['%s,%s' % (i[0], i[1]) for i in b])
print(x)
Apr 7
zipfile.is_zipfile(filename)

Returns True if filename is a valid ZIP file based on its magic number, otherwise returns False. filename may be a file or file-like object too.

Changed in version 3.1: Support for file and file-like objects.

这是手册中的介绍

python版本 3.3.5

Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
 

这是我的代码

def unpack():
    BASE_DIR = os.path.abspath(".")
    TAR_DIR = os.path.join(BASE_DIR, 'tar')
    tars = map(lambda x: os.path.join(TAR_DIR, x), os.listdir(TAR_DIR))
    for x in tars:
        if tarfile.is_tarfile(x):
            print(x)
            #myfile = tarfile.TarFile(x, 'r')
            #tarfile.TarFile.extractall(myfile, TAR_DIR)
        elif zipfile.is_zipfile(x):
            myfile = zipfile.ZipFile(x, 'r')
            f = myfile.namelist()[0]
            p = os.path.join(TAR_DIR, f)
            if not os.path.exists(p):
                zipfile.ZipFile.extractall(myfile, TAR_DIR)

bug出现的情况: 在测试flup-py3.3-master.zip是否为zifile时, 即zipfile.is_zipfile(x), 出现以下错误

Traceback (most recent call last):
  File "install.py", line 48, in <module>
    unpack_install()
  File "install.py", line 36, in unpack_install
    if tarfile.is_tarfile(x):
  File "C:\Python33\lib\tarfile.py", line 2444, in is_tarfile
    t = open(name)
  File "C:\Python33\lib\tarfile.py", line 1573, in open
    return func(name, "r", fileobj, **kwargs)
  File "C:\Python33\lib\tarfile.py", line 1638, in gzopen
    fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)
  File "C:\Python33\lib\gzip.py", line 184, in __init__
    fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
PermissionError: [Errno 13] Permission denied: 'F:\\dep\\tar\\flup-py3.3-master'
 
shell returned 1

原因是之前已经解压过在它所在的目录.

[待证]更进一步,应该是测试时,使用了当前目录作为试解压的目录. 因为已经有flup-py3.3-master这个目录了.所以错误就出现了.

附下载地址 flup-py3.3-master.zip

 

Apr 6

终于轮到我写笔记了. 我的目标是, 简单. 直接贴配置好了.

django: 应用服务器

flup: windows下的python cgi支持

nginx: 网页服务器

第一个坑: django admin的静态文件 调试时没有问题,可是用nignx时有问题.

经过查看nginx的日志, 必须把静态文件带过去static的目录或者指定

 

第二个坑: 运行cgi时出现黑窗口如何解决

使用 RunHiddenConsole 来搞定

网上介绍了cgi运行的办法(会有黑窗口)  run_cgi8801.bat

@echo off
python manage.py runfcgi method=threaded host=127.0.0.1 port=8801

Apr 1

WMI是什么

Windows管理规范(WMI)是Microsoft基于Web的企业管理(WBEM)的实现,这是一个行业计划,为有关计算机系统的几乎任何信息提供了一个公用信息模型(CIM)。

Python WMI模块是在pywin32扩展之上的轻量级封装,并隐藏了一些Python需要调用WMI API的凌乱管道。这是纯粹的Python, 应该兼容从2.1后(list comprehensions)任何版本Python及任何新版本的pywin32。

Mar 31

  • 翻译工具: google译者工具包
  • 文档: python 3.3.5 自带文档
  • 翻译比例: 人工翻译60%
  • 一律不翻译包名

只翻译目录部分,方便自己查阅. 有些词可能译得不够地道. 

导航

·        目录

·        模块 |

·        下一个 |

·        上一个 |

·        

·        大蟒 »

·        3.3.5文档 »

Python标准库

当 Python语言参考 描述了Python语言的确切语法和语义,这个类库参考手册描述了和Python一起分发的标准库 它也描述一些通常包含在Python发行版中的可选组件 

Python的标准库是拓展性很强的,提供范围广泛的工具,如下列内容的长列表所示 . 该库包含内置模块(用C语言编写),提供访问系统功能,如文件I / O,否则Python程序员将无法访问,以及用Python编写的模块,为发生在日常编程许多问题提供标准化的解决方案 其中一些模块都明确旨在鼓励和加强Python程序的可移植性 , 通过抽象出具体平台为与平台无关的API 

Python在Windows平台的安装程序通常包括整个标准库,通常还包括许多其他组件 对于类Unix操作系统的Python通常作为包的集合,因为它可能需要使用随操作系统获得一些可选组件或全部打包工具 

Mar 22

翻译自: http://docs.python.org/3/library/math.html

实用至上,所以我并不会把他们全部内容都翻译出来.

数论及表示函数

math.ceil(x)

返回大于等于x的最小的整数 如果x不是小数,则返回自身.

>>> ceil(10)
10
>>> ceil(10.1)
11
>>> ceil(-10.1)
-10

math.copysign(xy)

返回x的绝对值乘以加上y的符号(正负) 即|x|*y的符号

Mar 21
#python内置函数(2)
 isinstance(object, classinfo)
    object是不是classinfo的一个实例, 返回真假
issubclas(class, classinfo)
    class是不是classinfo的一个实例, 返回真假
iter(object[,sentinel])
    例子:
with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
        process_line(line)
len(s)
    返回s的长度
list([iterable])
    返回列表
map(function, iterable, ...)
    对于iterable中的每一个元素,执行function,返回和iterable一样的长度
max(iterable[,args...], *[,key])
    返回iterable最大值
memoryview(obj)
    返回obj的内存视图?
min(iterable[,args...], *[,key])
    返回iterable最小值
next(iterable[, default])
    返回iterable的下一个元素
object()
    返回新对象 object是所有类的基类
oct(x)
    返回8进制
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 
    打开文件(选项很多自行看手册罢)
ord(c)
    返回c在unicode中的序列值
pow(x, y[, z])
    返回pow(x, y) % z 
    pow(x, y) 相当于x**y(x的y次方)
print([object, ...], *, sep=' ', end='\n', file=sys.stdout, flush=False)
    打印
property(fget=None, fset=None, fdel=None, doc=None) 
    返回属性(手册有很多说明)
    例子
class C:
    def __init__(self):
        self._x = None
    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")
range([start], stop[, step])
    返回迭代器
repr(object)
    返回object可打印的str
reversed(seq)
    返回反转seq的迭代器
round(x[, n])
   ... 
set([iterable])
    返回iterable的集合
setattr(object, name, value)
    设置对象object属性name值value
slice([start],stop[, step])
    切片
sorted(iterable[,key][,reverse])
    返回已经排序的iterable(直接改变iterable)
staticmethod(function)
    返回函数的静态方法????
str([object[, encoding[, errors]]])
    返回str
sum(iterable[, start])
    返回和
super([type[, object-or-type]])
    ????
tuple([iterable])
    返回元组
type(object)
    查看object属于何类
type(name, bases, dict)
    返回新的类
vars([object])
    ???
zip(*iterables)
    ???
__import__(name, globals=None, locals=None, fromlist=(), level=0) 
    我累了....自己看手册吧
Mar 21
# python内置函数(1)
abs(x)
    返回绝对值
all(iterable)
    全真或者空返回真
any(iterable)
    只要有一个为真即返回真
ascii(object)
    如果是ascii字符则返回可打印,否则返回\x, \u或者\U开头的字符串
bin(x)
    返回二进制字符串以0b开头
bool([x])
    转化为布尔值
classmethod(function) 
    返回函数的类方法
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) 
    # 有点复杂
    ...
complex([real[,imag]])
    返回复数
delattr(object, name)
    删除属性
dict([arg])
    创建字典
dir([object])
    返回函数内置方法
divmod(a, b)
    # 有点复杂
    如果是整数, 返回(a // b, a % b)
    如果是小数, 返回(math.floor(a / b), a % b)
enumerate(iterable, start=0)
    返回枚举对象
    example: 
    >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    >>> list(enumerate(seasons))
    [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    >>> list(enumerate(seasons, start=1))
    [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
eval(expression, globals=None, locals=None)
    expression必须是str. globals必须是字典, locals可以是任何映射对象
    计算表达式的值
exec(object[,globals[,locals]])    
    动态执行python代码
filter(function, iterable)
   过滤函数 
   对于iterable中的每一个元素, 若function返回真, 则保留元素
float([x])
    返回小数
format(value[,format_spec])
    格式化字符串
    >>> '{0:.1f} {1}'.format(698.24, 'GB')
    '698.2 GB'
frozenset([iterable]) 
    不可变的集合
getattr(object, name[, default]) 
    返回对象的name属性
globals()
    返回所有全局变量
hasattr(object, name)
    如果对象有name属性,则返回真,否则返回假
hash(object)
    返回对象的hash值
help([object])
    帮助
hex(x)
    返回16进制
id(object)
    返回唯一标识(对象的生命周期内)
input([prompt])
    获取用户输入
int([number|string[,base]])
    返回整数 base 进制?

 

 

Mar 21

有个游戏,杀星很麻烦. 星的信息是从谣言频道发出的,但是谣言频道信息太多,需要提取. 星是有时效的,所以只显示最近的几十项就好.

本来不想做界面的,可是cmd实在是太丑了,而且占桌面空间,本来屏幕就小.

使用工具: python3+pyqt4

实际运行图是这样的. 

界面截图

游戏窗口是1024*768居中屏幕, 必须偏移一下辅助程序窗口,所以辅助程序窗口没有了右边框.

 

Mar 2

源自 Learning Python第三版

内置对象让写程序变得容易

对于简单任务,内置对象通常是你解决问题所需要的全部.因为你可以自由(便利)地使用这些强大的工具,比如集合(列表)和检索表(字典),你可以直接使用它们.你只需要使用Python的内置对象就可以完成大量的任务.

内置对象是拓展的组件

对于更复杂的任务,你可能还是需要使用Python的类或者C语言接口来构建自己的对象.但是,正如你接下来在本书看到的一样,自定义对象通常建立在内置对象之上,比如列表和字典.比方说,一个堆栈结构可能是通过调用或者自定义内建的列表来实现的.

内置对象通常比自定义数据结构更高效

Python的内置对象为了执行效率,已经采用C语言实现优化的数据结构算法.尽管你可以自己写出更小的的对象类型,但是你常常会纠结于获得跟内置对象一样的性能.

内置对象是Python语言标准的一部分

在某些方面,Python既借用了那些依赖于内置工具的语言(的特性), 比如说LISP,又借用了那些依赖于语言本身的编程提供工具或者框架(的特性),比如说C++.尽管你可以在Python里实现一些独特的类型,但你并不需要这么做,所以,只要用(内置对象)就好了. 更进一步说,因为Python内置对象是标准的,它们(提供的接口)通常都一样;另一方面,专有框架趋向于各自不同.

换句话说,内置对象不只是使写程序更容易,而且它们比多数手工创建的类型要强大高效得多.不管你实现了什么新对象,内置对象构成了每一个Python程序的核心.

 

译后感言: 读英文容易,但是要译成中文,却费了很多功夫.