python 代码本

当前执行文件

  • _file_
  • sys.argv[0]
    __file__和sys.argv[0]都可以获得当前执行文件的文件名。在当前执行文件中,获得的值是相同的。在外部文件调用的情况下__file__获取当前文件,而sys.argv[0] 则是py调用文件。

路径

_file_:可能是相对路径。取决于外部执行python的时候的路径
sys.argv[0]:可能是相对路径

import os,sys
dir, file = os.path.split(os.path.abspath(sys.argv[0]))
---------------------------------------------------
import os,sys
dir = os.path.realpath(__file__)

io读取文件

try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())

字符串匹配

line.index("12312") > 0
line.find("12312") > 0
"12312" in line

使用in的方法是最短的

基本数据结构(列表, 元组,字典)

list = [1,2,3,4]
tup = (1,2,3)
dict = {"1":1,"2":2}

列表字典不用多解释,元组跟列表类似,不过无法修改。

match findall

import re

march匹配成功后,返回Match对象
返回string中所有与pattern相匹配的全部字串,返回形式为数组。

_name_ and main()

if __name__ == "__main__":

我们用python写的各个module都可以包含一个类似main函数,只不过python中的这种__main__与c中有一些区别,主要体现在:

  • 当单独执行该module时,if为true
  • 当被其他python引用是,if为false

global 全局变量

strTest='**123**'
def test():
    global strTest
    print strTest

定义全局变量,在function内使用global声明

GlobalVar.py
VarA = "hello"
VarB = "world"
Test.py
import GlobalVar
	print GlobalVar.VarA + " " + GlobalVar.VarB

在文件中定义全局变量,通过文件.方式访问变量

xml解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析XML,SAX,DOM,以及ElementTree。

SAX是一种基于事件驱动的API。
利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。
解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;
而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。
1、对大型文件进行处理;
2、只需要文件的部分内容,或者只需从文件中得到特定信息。
3、想建立自己的对象模型的时候。
在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。

import xml.sax

class xmlHandler(xml.sax.ContentHandler):
	def __init__(self):
		self.CurrentTag = ""
		self.CostomData ={}
	
	def startElement(self,tag, attributes):
		self.CurrentTag = tag
		if tag == "head" :
			if attributes.has_key("size"):
				print("deal start element" + attributes["size"])
		elif tag == "body" :
			print "deal body"
	
	def endElement(self,tag):
		if self.CurrentTag == "head":
			print "deal hand end"
		elif self.CurrentTag == "body":
			print "deal body end"
		self.CurrentTag = ""

	def characters(self, content):
		print "deal content"

if __name__ == "__main__":
	file_name = "xxx.xml"
	parser = xml.sax.make_parser()
	parser.setFeature(xml.sax.handler.feature_namespaces,0)
	handler = xmlHandler()
	parser.setContentHandler(handler)
	parser.parse(file_name)

类型转换 int str

int("60")
str(60)

class A():
	def __init__(self):
		self.attr = []
	
	def __str__(self):
		print 'A:%s' % (self.attr)

	def setAttr(value):
		self.attr = value

继承

class A(object):
	def __init__(self):
		self.attr = []
class B(A):
	def __init__(self):
		super(B,self).__init__()

定义class的时候参数就是继承的父类。

class A():
	def __init__(self):
		self.attr = []
class B(A):
	def __init__(self):
		super(B,self).__init__()

TypeError: must be type, not classobj
父类未继承object,在初始化b时就会报错。需要显示调用父类_init_()执行时,

class B(A):
	def __init__(self):
		A.__init__()

super(childB, self).init()

_init_() _str_()

_init_() 是类构造方法,继承关系中子类需要手动调用父类构造方法。
_str_() 如果要把一个类的实例变成 str

单下划线、双下划线、头尾双下划线说明:
  • _foo_: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
  • _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
  • __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
python syntaxerror non-ascii character

原因: 文件中存在汉子或其他字符
解决方法: 文件头添加

#coding:utf-8
外部参数args
import sys
f1 = int(sys.argv[1])
f2 = int(sys.argv[2])
f3 = int(sys.argv[3])
f4 = int(sys.argv[4])
print(f1, f2, f3, f4)
相对路径
os.path.abspath("..\..\")
编译pyc

pyc文件是py文件编译后生成的字节码文件(byte code)。pyc文件经过python解释器最终会生成机器码运行。所以pyc文件是可以跨平台部署的,类似Java的.class文件。一般py文件改变后,都会重新生成pyc文件。

为什么要手动提前生成pyc文件呢,主要是不想把源代码暴露出来。

python -m py_compile test.py
字符串替换
a = 'hello word'
b = a.replace('word','python')
print b
绝对路径转相对路径
print os.path.relpath("d:/test/test.py")

是根据当前路径的相对路径

相对路径转绝对路径
path = "..\test.py"
print os.path.abspath(path)
递归遍历文件,文件夹
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))  
执行cmd命令
import os
cmd = 'mkidr a'
os.system(cmd)
执行cmd多多条命令
import os
cmd = 'cd  ../../res & dir'
os.system(cmd)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章