美文网首页
Python 学习总结

Python 学习总结

作者: MJ爱运动 | 来源:发表于2017-02-06 11:44 被阅读80次

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

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

    相关文章

      网友评论

          本文标题:Python 学习总结

          本文链接:https://www.haomeiwen.com/subject/shwyittx.html