python方面
python中没有花括号,是靠缩进来代替花括号,语句结尾不需要加;
python声明变量的时候不需要代变量类型,var1 = '值'
-
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position
0: ordinal not in range(128) 问题解决办法- 改变系统编码(Python 默认脚本文件都是 UTF-8 编码的)
1.import sys
2.reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
3.sys.setdefaultencoding('utf-8')
-
sys模块
- sys.argv 获取命令台输入的参数
如python test.py 则sys.argv为['test.py]
如python test.py hello 则sys.argv为['test.py','hello']
- sys.argv 获取命令台输入的参数
-
命名规范:
- 变量名,函数名,模块名全部都小写并用下划线_链接。如:is_true = False
- 类名:英文单词首字母全大写 如:class FileManager:
使用str.join(元组或者字典)进行字符串链接,通过str.split(字符串)进行字符串的分割
li = ['my','name','is','bob'] '_'.join(li) 'my_name_is_bob'
['my..name..is..bob'] b.split("..") ['my', 'name', 'is', 'bob']
- if name == "main"
if__name__=="__main__" 当模块被直接运行的时候会调用这里面的代码 else 当模块是被引用调用的时候就调用这里的代码
- python通过import导入模块的时候,如果模块中有执行函数或者有输出语句,也会在导入的时候执行,所以如果在导入模块的时候要注意是否会有影响
- 异常
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功" fh.close()
-
时间相关的操作:
-
platform模块:
- 判断操作系统:platform.system(),windows系统下返回Windows,linux下返回Linux,苹果系统和linux的不一样
-
输出和输入:
- 输出:print "hello world"
- 输入:str = raw_input("请输入:");
- raw_input()中文乱码解决方法:linxu下都是用utf-8而windows用的是gbk,编码不同,要根据系统来决定编码
# encode为根据系统求出来的编码 user_name=raw_input(u"输入名字首字母缩写按enter键结束:".decode('utf-8').encode(encode))
-
文件操作:
- 打开文件:
- file fo= open(file_name [, access_mode][, buffering])(用完要close())
- with open(file_name) as fo: (会自动帮你close,推介用这个)
- 读取 fo.read([count]) str = fo.read(10); 从fo的文件里读取10个字符
- 写入 fo.write(string)
read和wirte方法会移动文件指针所指位置
-
定位 fo.tell()告诉文件指针所在位置
fo.seek(0,0)定位到开头 第一个是位置,第二个是偏移量
- 打开文件:
-
getpass模块:
- 获得当前登录用户名:sys_user = getpass.getuser()
-
os模块:
- 重命名文件test1.txt到test2.txt。os.rename( "test1.txt", "test2.txt" )
- 删除一个已经存在的文件test2.txt。os.remove("test2.txt")
- 在当前目录下创建文件夹。os.mkdir("newdir")
- 改变所在文件夹(相当于cd命令)。os.chdir("newdir")
- 显示当前工作目录。os.getcwd()
- 删除目录。os.rmdir( "/tmp/test" )
- 获取运行时脚本所在文件夹名字以及脚本的文件名:dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
- 访问某文件夹下所有文件:os.listdir()
for filename in os.listdir('foldName'): print filename
- file返回当前脚本名字
- os.path.abspath(file)返回当前脚本绝对路径
- os.path.abspath(sys_arvgc[0])返回当前脚本绝对路径
- os.path.join(current_file_path, "config.cfg") 根据系统生成路径
-
re模块:(用来匹配字符,可以插入正则表达式)
- os.dirname()获取路径中的文件夹名
- os.dirname(os.path.abspath(file))获取脚本所在文件夹名
- os.access(path,mode),查看文件有没有mode的权限,mode可以为os.X_ok可执行,等等
- os.unlink() 删除文件,如果文件为目录则返回一个错误
- os.walk(dirpath) 遍历文件夹
- os.makedirs(path,mode) 以mode的形式递归创建目录
- os.path.isdir(path) 判断是否是文件夹
- re.match函数
- 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
- re.search函数。re.search 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
- re.findall(),返回找到的全部
-
group() 把匹配成功的字符串作为元组返回:
-
基本用法:采用下标,group(0)
file_name = '2016-01-15.log regex = r'\d{4}-\d{1,2}-\d{1,2}' match = re.search(regex, file_name) if match: start_date = {u"start_date": match.group(0)} return start_date else: print "didn't find date" return ERRORNO match.group(0)为2016-01-15
-
高级用法:采用别名,(?P<别名>匹配模式),给这个匹配模式匹配到的内容都是这个别名里的值,通过.group('别名获取')
regex = r'(?P<fail>\d+), success: (?P<success>\d+), no_return: (?P<no_return>\d+), total: (?P<total>\d+)' match = re.search(regex, file_content) if match: fail = match.group('fail') success = match.group('success') no_return = match.group('no_return') total = match.group('total') fail_reason = extract_fail_reason.get_fail_reason(file_content) number_dictionary = {u'fail': fail, u'success': success, u'no_return': no_return, u'total': total, u'fail_reason': fail_reason} return number_dictionary ```
-
-
命令台相关操作:OptionParser()用来解析命令台输入的命令
- 导入:from optparse import OptionParser
- 声明:optParser = OptionParser()
- 添加命令:optParser.add_option("--daily","-d",default=True,action="store_true", dest="is_daily",help=u"默认按天进行日志分析,可以跟格式为YYYY-MM-DD的日期")
- 参数说明:
- "--daily","-d"为命令选项,d为缩写
- default=True表示这个选项是默认的
- action='store_true'表示存放成bool形
- dest:操作的别名
- help帮助文档
- 参数说明:
- 解析命令:(options, args) = optParser.parse_args()
- 通过options.is_daily
- args为参数
-
子进程subprocess.Popen(),打开一个进程并且执行控制台命令
import subprocess #command为命令如command = "git push origin %s:%s" % (new_branch_name, new_branch_name) def get_process_output(command): process = subprocess.Popen([command], stdout=subprocess.PIPE,shell=True) ensure_process_right(process, command) if process.wait() == 0: output = process.stdout.readline().strip() return output def ensure_process_right(process, command): if process.returncode: #returncode为返回码,如果执行错误会有值 print (u'执行 ' + command + u'命令时发生错误,退出程序') exit(0)
python图形库:pygal
安装pip easy_install pip
安装 pygal easy_installinstall pygal
代码解析:
titile是图表的标题
x_labels是横轴的数据
剩下的是主数据
通过add('数据名',[值])
import pygal
line_chart = pygal.Line()
line_chart.title = 'Browser usage evolution (in %)'
line_chart.x_labels = ['2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012']
line_chart.add('Firefox', [1, 2, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])
line_chart.add('Chrome', [3, 2, 5, 77, 43, 22, 0, 3.9, 10.8, 23.8, 35.3])
line_chart.add('IE', [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others', [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])
line_chart.render()
import os
f=open('aaa.html','w')
f.write(line_chart.render())
f.close()
- xlwt编写excel文件
用法:
1.import xlwt导入xlwt模块
2.通过:excel_file = xlwt.Workbook() # 创建工作簿
3.通过sheet = excel_file.add_sheet(u'log', cell_overwrite_ok=True)生成sheet
4.sheet.write(行坐标,列坐标,值,样式)插入值
如:sheet.write(0, i, title[i], set_style('Times New Roman', 200, True))
5.通过excel_file.save("log9.xlsx") 保存
样式设置
通过XFStyle设置样式有描述字符串num_format_str,字体font,居中
alignment,边界borders,模式pattern,保护protection等属性。
style = xlwt.XFStyle()初始化一个样式
percent_style = xlwt.easyxf(num_format_str='0.00%')在初始化样式的时候指定是百分比类型
font = xlwt.Font() # 为样式创建字体
alignment = xlwt.Alignment() 创建对齐方式
font和alignment都可以通过style.font=font和style.alignment=alignment加载到样式中
相当于style最大,alignment和font是他的属性
设置规则
通过xlwt.Formula()设置
no_return_rate_formule='G{current_row}/H{current_row}'.format(current_row=current_row_str)
sheet.write(row, 10, xlwt.Formula(no_return_rate_formule),percent_style)
参考网址
http://www.tuicool.com/articles/BFFbUvu
错误:More than 4094 XFs (styles) 解决方法
原因是:easyxf最多只能产生4094个
urlparse 解析请求(解析url)
- urlparse.urlparse(url) 解析url,会生成一个urlparse的对象
(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=%E5%87%BB%E6%B2%89&rsv_spt=1&rsv_iqid=0xc24a2e7700020d3c&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=b
aiduhome_pg&rsv_enter=1&rsv_sug3=18&rsv_sug1=23&rsv_sug7=101&rsv_sug2=0&inputT=6850&rsv_sug4=7802', fragment='')
如果想获取get请求时的参数 可以使用 urlparse.urlparse(url).query来获取
- urlparse.parse_qs(urlparse.urlparse(self.path).query) 把urlparse转换为元组
查询元组中是否存在某个键值
if 's' in data 如果元组中存在s这个值则为真
在python中字符串也可以当做元组处理
in for in 的用法
if not any([city in host_name for city in cities])
any()的用法是当里面的元素全为0,空,或者false时返回FALSE,否则为TRUE
遍历cities数组并且查找host_name里有没有city这个值
for _ in 元组:
遍历元组但是不需要使用里面的值