• 2018-06-10——python基础整理


    一、基础

    http://www.cnblogs.com/jin-xin/articles/7459977.html

    单双引号没有任何区别,只有在多行字符串的情况 需要考虑单双的配合,一般多行字符串必须用多引号。Eg:msg = "My name is Alex , I'm 22 years old!"

    和c不同的是没有分号结尾

    保存的后缀名单个文件无所谓,如果在程序中导入时必须为.py

    #!/usr/bin/env python  //linux解释器路径

    print (time.time() ) //输出当前时间

    len(str)//获取str的字符个数,py3包括中文,2.7中要另外算

    敲int、str、bool等,按住ctrl单机,会进入类型列表,真几把炫酷

    可变类型:列表、字典

    不可变类型:字符、数字、元祖

    直接访问:数字 

    顺序访问:字符、列表、元祖

    映射:字典

    文件的存储,传输不能是unicode编

    s.encode(utf-8)//str(unicode)编码为utf-8bytes类型

    bytes类型:s=b‘xxx’    不能是中文

    小数据池:范围内的数字、字符串,创建时会共用一个内存地址

    数字范围:-5~256

    字符串范围:不能是特殊字符、单个字符s*20还是一个地址,21以后是两个

     *编码

    python3默认编码utf-8(对Unicode编码的压缩和优化,将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节)

    Unicode(最少两字节)

    # -*- coding: utf-8 -*-//使用utf-8编码

    *注释

    单行注视:# 被注释内容

    多行注释:""" 被注释内容 """

    选中后ctrl + ? 整体注释 //感觉这个快捷键一点也不方便

    *执行脚本导入参数

    Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:

    Python内部提供的模块

    业内开源的模块

    程序员自己开发的模块

    Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

    *pyc文件

    执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。

    ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。

    *变量

    变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。

    Id(name)//查看name的内存位置

    对于系统内部,变量名实际指向一个内存地址,

    声明变量:name = “value”//声明一个变量,变量名为: name,值为:"value"

    等于号也是赋值,如name1 = name name2 = “value2”

    变量名只能是字母、数字或下划线的任意组合

    变量名的第一个字符不能是数字

    以下关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

    变量的定义要具有可描述性。

    推荐使用大小写数字结合,或结合下划线的方式定义变量

    *常量

    常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

    在c语言中就有相应的语法const来定义常量

    *输入输出

    输入:input(“****”)// ***为自定义输出字符串。一般赋值给变量,输入的都是字符串格式

    输出:print(“*****”,name)// ***为自定义输出字符串,name为变量,其中用逗号分隔

    输入:raw_input(‘*******’)

    如果是输入密码,想要不可见,可利用getpass 模块中的 getpass方法输入:

    getpass.getpass(“*********”)

    *循环

    Python中没有{},而是使用空格缩进或制表符来确立逻辑顺序。

    break:退出当前循环执行循环下面的语句。

    continue:退出当前循环继续下一次循环。

    while 条件:

             循环体

    Else:

    **********

    If

    *****************

    for item in value//按顺序将可迭代对象vlaue中的值赋给item并操作

             执行语句

    *************************

    for item item1 in enumerate(value,x)//同for,为可迭代的对象添加序号,从x开始,默认是0

             执行语句

    **************************

    range和xrange生成指定范围的数字

    for i in range(1,10):

        print(i)

    for i in range(1,10,2):  # 步长

        print(i)

    for i in range(10,1,-2): # 反向步长

        print(i)

    *格式化输出

    类似于c的用法

    %[(name)][flags][width].[precision]typecode

    (name)      可选,用于选择指定的key

    flags          可选,可供选择的值有:

    +       右对齐;正数前加正好,负数前加负号;

    -        左对齐;正数前无符号,负数前加负号;

    空格    右对齐;正数前加空格,负数前加负号;

    0        右对齐;正数前无符号,负数前加负号;用0填充空白处

    width         可选,占有宽度

    .precision   可选,小数点后保留的位数

    typecode    必选

    s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置

    r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置

    c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置

    o,将整数转换成 八  进制表示,并将其格式化到指定位置

    x,将整数转换成十六进制表示,并将其格式化到指定位置

    d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置

    e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)

    E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)

    f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)

    F,同上

    g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)

    G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)

    %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

    eg:name = “xxxxxxx:%s %d”%(name,age)

    tpl = "i am %s" % "alex"

    tpl = "i am %s age %d" % ("alex", 18)

    tpl = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18}

    tpl = "percent %.2f" % 99.97623

    tpl = "i am %(pp).2f" % {"pp": 123.425556, }

    tpl = "i am %.2f %%" % {"pp": 123.425556, }

    ******************************

    Format方式:[[fill]align][sign][#][0][width][,][.precision][type]

    fill           【可选】空白处填充的字符

    align        【可选】对齐方式(需配合width使用)

    <,内容左对齐

    >,内容右对齐(默认)

    =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字

    ^,内容居中

    sign         【可选】有无符号数字

    +,正号加正,负号加负;

     -,正号不变,负号加负;

    空格 ,正号空格,负号加负;

    #            【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

    ,            【可选】为数字添加分隔符,如:1,000,000

    width       【可选】格式化位所占宽度

    .precision 【可选】小数位保留精度

    type         【可选】格式化类型

    传入” 字符串类型 “的参数

    s,格式化字符串类型数据

    空白,未指定类型,则默认是None,同s

    传入“ 整数类型 ”的参数

    b,将10进制整数自动转换成2进制表示然后格式化

    c,将10进制整数自动转换为其对应的unicode字符

    d,十进制整数

    o,将10进制整数自动转换成8进制表示然后格式化;

    x,将10进制整数自动转换成16进制表示然后格式化(小写x)

    X,将10进制整数自动转换成16进制表示然后格式化(大写X)

    传入“ 浮点型或小数类型 ”的参数

    e, 转换为科学计数法(小写e)表示,然后格式化;

    E, 转换为科学计数法(大写E)表示,然后格式化;

    f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;

    F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;

    g, 自动在e和f中切换

    G, 自动在E和F中切换

    %,显示百分比(默认显示小数点后6位)

    eg:tpl = "i am {}, age {}, {}".format("seven", 18, 'alex')

    tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])

    tpl = "i am {0}, age {1}, really {0}".format("seven", 18)

    tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])

    tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)

    tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})

    tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])

    tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)

    tpl = "i am {:s}, age {:d}".format(*["seven", 18])

    tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)

    tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})

    tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)

    tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)

    tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)

    tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

    *基本运算符

    +:加法

    -:减法

    *:乘法

    /:除法

    **:x的y次幂

    //:取商

    %:取余数

    ***************************以上加个=号比如+=,即变成了赋值运算

    ==:比较是否相等

    <>|!=:比较是否不相等

    >|<|>=|<=:大于、小于、大于等于、小于等于

    and、or、not:与或非

    即优先级关系为( )>not>and>or,同一优先级从左往右计算。

    x or y , x为真,返回x

    x and y, x为真,返回y

    sum([x,y,z…..])

    *文件操作

    #1. 打开文件,得到文件句柄并赋值给一个变量

    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

    #2. 通过句柄对文件进行操作

    data=f.read()

    #3. 关闭文件

    f.close()

    使用with关键字来帮我们管理上下文,可不需要close

    with open('a.txt','w') as f:

        pass

     

    文件编码

    f =open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

    #这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

    f=open('a.txt','r',encoding='utf-8')

    文件的打开模式

         文件句柄 = open(‘文件路径’,‘模式’)

         #1. 打开文件的模式有(默认为文本模式):

    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

    w,只写模式【不可读;不存在则创建;存在则清空内容】

    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

    #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

    rb

    wb

    ab

    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    #3,‘+’模式(就是增加了一个功能)

    r+, 读写【可读,可写】

    w+,写读【可写,可读】

    a+, 写读【可写,可读】

    #4,以bytes类型操作的读写,写读,写读模式

    r+b, 读写【可读,可写】

    w+b,写读【可写,可读】

    a+b, 写读【可写,可读】

    文件操作方法

    1. 文件打开方式为文本模式时,代表读取3个字符

    2. 文件打开方式为b模式时,代表读取3个字节

    其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate

    注意:

    1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

    2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。

    3. 对文件进行for循环,是以行为单位进行的。

             def close(self, *args, **kwargs): # real signature unknown

            关闭文件

            pass

        def fileno(self, *args, **kwargs): # real signature unknown

            文件描述符 

            pass

        def flush(self, *args, **kwargs): # real signature unknown

            刷新文件内部缓冲区

            pass

        def isatty(self, *args, **kwargs): # real signature unknown

            判断文件是否是同意tty设备

            pass

        def read(self, *args, **kwargs): # real signature unknown

            读取指定字节数据

            pass

        def readable(self, *args, **kwargs): # real signature unknown

            是否可读

            pass

        def readline(self, *args, **kwargs): # real signature unknown

            仅读取一行数据

            pass

        def seek(self, *args, **kwargs): # real signature unknown

            指定文件中指针位置

            pass

        def seekable(self, *args, **kwargs): # real signature unknown

            指针是否可操作

            pass

        def tell(self, *args, **kwargs): # real signature unknown

            获取指针位置

            pass

        def truncate(self, *args, **kwargs): # real signature unknown

            截断数据,仅保留指定之前数据

            pass

        def writable(self, *args, **kwargs): # real signature unknown

            是否可写

            pass

        def write(self, *args, **kwargs): # real signature unknown

            写内容

            pass

    f.seek (0)//调光标在字节位置

    f.tell()//返回当前光标的字节位置

    f.read(x)//读到x字符索引位置,默认-1 

    f.readline()//读第x行,默认x为0

    f.readlines()//以列表的形式读多行, 

    f.truncate(x)//将源文件截取x位,也就是光标起始后x位,超出的会删除

    文件的修改

    方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

    import os  # 调用系统模块

    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:

        data=read_f.read() #全部读入内存,如果文件很大,会很卡

        data=data.replace('alex','SB') #在内存中完成修改

        write_f.write(data) #一次性写入新文件

    os.remove('a.txt')  #删除原文件

    os.rename('.a.txt.swap','a.txt')   #将新建的文件重命名为原文件

    方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

    import os

    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:

        for line in read_f:

            line=line.replace('alex','SB')

            write_f.write(line)

    os.remove('a.txt')

    os.rename('.a.txt.swap','a.txt') 

  • 相关阅读:
    周鸿祎:很多程序员聪明,但我一看就知道他不会成功
    Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)
    ffmpeg源码分析之媒体打开过程
    搜集的动植物分类、检索网站
    sipp命令 各参数含义
    最简单的一个win32程序
    vi学习笔记
    删除结点 (双向链表)
    插入结点(双向链表)
    La=LaULb (单链表)
  • 原文地址:https://www.cnblogs.com/gulanmoen/p/9167254.html
Copyright © 2020-2023  润新知