Python 学习总结

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']
  • 命名规范:

    • 变量名,函数名,模块名全部都小写并用下划线_链接。如: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

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://wenku.baidu.com/link?url=EJQYDpO8GcxkDlWojsTbIXCxEPu7TI9KoPR9lyrUM_MoC97vCPT8o7L6zFB0TZsMHs8yk6MW6sMh5UDPAAVwTVlpDIYVQ-GFELrNvFGd2Ze

最全网址

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 元组:

遍历元组但是不需要使用里面的值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 今天突然在网上看到了这本电子pdf,看见还有视频课程,不过课程貌似收费,心想着Python一直没怎么学,也没怎么用...
    晴漱阅读 2,641评论 1 0
  • Python 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的...
    不是好程序阅读 1,181评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,548评论 1 118
  • 看了大家很多评论,说说自己的看法吧~首先很多酷友关注的动效 可以称之为logo演绎,可以作为形象展示,也可做设计思...
    靖兰亭阅读 764评论 0 49