Pytho知识总结2

输入输出语句

  1. python语法

>>> x = 10

>>> if x > 5:

... print("I'm jack")

...

I'm jack

Python不是靠括号决定语法是否结束,而是靠缩进判断程序是否结束。Python语言在语法习惯上有些变化:

  1. 括号是可选的,但一般不加括号
  2. 冒号代表符合语句

    Python中所有的符合语句,首行以冒号结尾,下一行的嵌套按照缩进格式书写,缩进代表代码块结束,不用使用大括号代表程序结束。

  3. 用分号表示语句终止
  4. Python需要严格执行语法缩进,通过语法缩进判断程序的逻辑结构
  1. 接收用户输入

    1。、接收用户输入

    >>> info = input('please input you name: ')

    在python3中使用input函数接收用户输入,而在python2.6以前的版本使用raw_input接收用户输入

2、判断用户输入的数据是否为纯数字

①字符串对象的isdigit方法

字符串对象的isdigit方法用于检测字符串是否为纯数字,如果是纯数字返回值为真,否则返回值为假

>>> name = 'jack'

>>> age = '20'

>>> name.isdigit() #调用字符串的isdigit方法测试

False

>>> age.isdigit()

True

②四则运算器

③用try测试是否为数字

try测试更加简洁,格式:

try:

测试语句

expect:

测试失败之后的执行语句

else:

测试成功之后的执行的组合语句

注意:else语句是try的组合语句

  1. print打印函数

    在python3.x中,print是一个内置函数,用关键字参数来表示特定模式

    在python2.x中,print是语句,拥有自己的特定语法

    1. print函数的使用

>>> name = 'jack'

>>> age = 18

>>> sex = M

>>> print(name,age,sex)

('jack', 18, 'M')

可以使用sep参数,在打印的灭个对象文本之间插入一个字符串。如果没有指定sep,默认使用空格分开打印的对象文本。

>>> print(name,age,sex,sep=":") #使用:作为分隔符

jack:18:M

>>> print(name,age,sex,sep="") #不使用分隔符

jack18M

使用end参数,在打印的对象文本之后加入一个字符串。默认使用换行符。

>>> print(name,age,sex);print(name,age,sex)

jack 18 M

jack 18 M

>>> print(name,age,sex,end="");print(name,age,sex) #使用end参数,让输出不换行

jack 18 Mjack 18 M

>>> print(name,age,sex,end="->");print(name,age,sex)#使用end参数,在输出内容后面输出其他内容

jack 18 M->jack 18 M

sep参数和end参数可以结合使用

>>> print(name,age,sex,sep=":",end="->\n")

jack:18:M->

也可以使用file参数,把print内容直接输出到指定文件中

>>> print(name,age,sex,sep=":",file=open('test.txt','w'))

  1. 字符串格式化输出
  2. 字符串格式化转换类型

格式

描述

%c

字符及其ASCII码

%s

字符串(使用str转换任意python对象)

%r

字符串(使用repr转换任意python对象)

%d(%i)

有符号整数(十进制)

%u

无符号整数(十进制)

%x

无符号整数(十六进制)

%X

无符号整数(十六进制大写字符)

%e

浮点数字(科学计数法)

%E

浮点数字(科学计数法,用E代替e)

%f(%F)

浮点数字(用小数点符号)

%g

浮点数字(根据值得大小采用%e或%f)

%G

浮点数字(类似于%g)

%p

指针(用十六进制打印值得内存地址)

%n

存储输出字符的数量放进参数列表的下一个变量中

  1. 转换说明符

基本的转换说明符包含以下部分,注意其中的顺序:

A、%字符:标记转换说明符的开始

B、转换标识(可选):-标识左对齐,+标识在转换值之前要加上正负号;""空白字符表示整数之前保留空格;0表示转换值若位数不够则用0填充

C、最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度、如果是*,则宽度会从值元组中读出

D、点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。

注意:如果格式化里面包含了百分号,那么必须使用%%,这样python就不会将百分号误认为是转换说明符了

  1. 举例
  2. 基本用法:

>>> print('%s %s %s %d years old' % ('my','name','is',20))

my name is 20 years old

>>> print (' PI is : %f' % math.pi)

PI is : 3.141593

  1. 字符宽度和精度

>>> print('...%10f...' % math.pi) #输出十位的浮点数

... 3.141593... #通过…可以看到左侧补了两位空格,补全到十位

>>> print('...%10.2f...' % math.pi)

... 3.14... #输出10,小数精度2位,不足位用空格补全

>>> print('...%*.*f...' % (10,5,math.pi))

... 3.14159... #如果精度是*.*,会从值中读取精度

  1. 符号、对齐和0填充

在字段宽度和精度之前可以(可选)放置一个"标表",该标表的值可以是:

0(零):表示数字将会用0进行填充

+(加号):表示不管是正数还是负数都标示出符号(在对齐时很有用)

-(减号):表示左对齐数值

空格:表示正数前加上空格,这对需要对齐正负数时会很有用

>>> print('...%010.2f...' % math.pi)

...0000003.14... #输出10位,不足位用0补全

>>> print('...%-10.2f...' % math.pi)

...3.14 ... #输出10位,左侧对齐

>>> print('...%+f...' % math.pi)

...+3.141593... #在数值之前输出正负号

 

Python流程控制

  1. if条件判断语句
    1. 单分支判断语句

    >>> age = 18

    >>> if age >= 16:

    ... print("too old")

    ...

    too old

    1. 双分支判断语句

    >>> age = 18

    >>> if age >= 16:

    ... print("too old")

    ... else:

    ... print("too young")

    ...

    too old

    1. 多分支判断语句

    #!/usr/bin/env python

    num = input('please input a num: ')

    if not num.isdigit: #判断输出的是否为数字,否则报错

    print("error!input a num")

    elif int(num) >= 18: #input接收为字符型,转为整型

    print("old")

    else:

    print("young")

  2. 真值测试

    Python中布尔值测试符

    任何非零数字或非空对象都为真

    >>> if 1:

    ... print("true")

    ... else:

    ... print("false")

    ...

    True

    数字零、空对象以及特殊对象被认为假

    >>> if 0:

    ... print("true")

    ... else:

    ... print("false")

    ...

    False

    比较和相等测试会返回True或False

>>> 2 < 3 , 5 < 3

(True, False)

布尔and和or运算符会返回真或假

>>> 1 and 1

1

>>> 1 and 0

0

>>> 0 or 1 #or测试,会由左至右求值操作,返回第一个为真的操作对象

1

>>> not 1 #如果值为真,就返回假;如果为假,就返回真

False

>>> 3 and 4 , 3 and 7 #如果两侧都为真,则输出右侧的值

(4, 7)

>>> '' and () #如果两侧都为假,则碰到的第一个假会终止运行,并返回第一个值

''

>>> () and ''

()

  1. 比较运算符

    比较元素符条件中最基本的运算符,详见下表:

表达式

描述

x == y

X等于y

x < y

X小于y

x > y

X 大于y

X >= y

X大于等于y

X <= y

X小于等于y

X != y

X 不等于y

X is y

X和y是同一个对象

X is not y

X和y是不同对象

X in y

X是y容器(序列等)的成员

X not in y

X不是y容器(序列等)的成员

>>> a = 'test'

>>> b = 'text'

>>> if a is b:

... print('True')

... else:

... print('False')

...

False

  1. while循环

    while循环只要测试表达式为真,就一直循环

>>> a = 1

>>> while a <= 100:

... print(a)

... a += 1

  1. 循环特殊符号
    1. break 跳出整个循环过程
    2. continue 终止本次循环

>>> a = 1

>>> while a <= 10:

... a += 1

... if a == 5:

... continue

... print(a)

  1. pass 是一个无运算的占位符,代表什么都不做

    用于:

    >保证格式完整

    >保证语义完整

>>> if age >= 18:

... print("too old")

... else:

... pass

  1. for循环
    1. 基本循环

>>> for i in range(4):

... print(i)

  1. for可以识别多种数据类型,只要这种数据类型支持序列操作。比如字符串、列表、元组

>>> for i in [1,2,3,4]: #for遍历列表

... print(i)

>>> for i in 'jack': #for遍历字符串

... print(i)

>>> for i in (1,2,3,4): #for遍历元组

... print(i)

>>> y = {'name':'jack','age':'18'}

>>> for x in y :

... print(x,'is',y[x])

...

age is 18

name is jack

  1. range函数

    函数原型:range(start, end, scan)

    参数含义:

    Start:计数从start开始。默认是从0开始

    End:计数到end结束,但不包括end

    scan:每次跳跃的间距,默认为1

    注意:在python2.x中,range返回值是一个列表

    在python3.x中,range返回值是一个迭代值,所以所以range(5)得到的值是range(0,5),但是不影响for循环使用,不过要想在命令行中输出列表,需要:list(range(5)

    >>> list(range(1,20,2))

    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

     

    Python中重要的系统模块

  1. 在python中执行shell命令
    1. 调用os模块的system方法

      >>> import os

      >>> os.system('ls /root')

      使用这种方法不能把执行结果赋值变量,进行程序运算

      >>> a = os.system('ls /root')

      anaconda-ks.cfg install.log install.log.syslog py test.py #命令结果会输出到屏幕,但是变量中只有命令的返回值

      >>> print(a)

      0

      >>> b = os.system('ls /rootoooo')

      ls: cannot access /rootoooo: No such file or directory

      >>> print(b) #如果命令报错,则返回值为非零

      512

    2. 调用os模块的popen方法

      >>> a = os.popen('ls /root')

      >>> print(a.read())

      通过os.popen()返回的是file read的对象,对其进行读取read()的操作可以看到执行的输出,但是无法读取程序执行的返回值

    3. 使用subprocess模块

      Subprocess是python创建子进程的工具,然后在子进程中执行另一个进程

      1. 执行系统命令

        >>> subprocess.call(['ls','-l'])

        >>> subprocess.call(['ls','-l','/'])

        #把命令(ls)和选项(-l),以及参数(/)当做列表传递给subprocess.call()

        >>> subprocess.call('ls -l',shell=True)

        可以使用shell=True这个参数,这个时候,我们使用一整个字符串,而不是一个列表来运行子进程。Python将会运行一个shell,再用这个shell来解释这整个字符串

      2. 把命令结果赋值变量

        如果用call方法赋值,只会把命令返回值赋予变量,如:

        >>> a = subprocess.call(['ls','-l'])

>>> print(a)

  1. #变量a的值是命令的返回值

所以需要使用subprocess模块的check_output方法来给予变量赋值,也可以使用getstatusoutput方法

>>> a = subprocess.getstatusoutput('ls /root')

>>> print(a) #调用getstatusoutput,执行命可以看到返回值与命令结果

(0, 'anaconda-ks.cfg\ninstall.log\ninstall.log.syslog\npy\ntest.py')

>>> b = subprocess.check_output(['ls','-l','/root'])

>>> print(b) #可以看到命令执行结果

  1. OS模块的使用
    1. os模块概述

      python os模块包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块尤为重要

    2. 常用方法
      1. os.name

        #输出字符串指示正在使用的平台,如果是windows则用'nt'表示,对于Linux、Unix用户,则是'posix'

>>> import os

>>> os.name

'posix'

  1. os.getcwd()

    函数得到当前工作目录,即当前python脚本工作的目录路径

  2. os.listdir()

    返回指定目录下的所有文件和目录名

  3. os.remove()

    删除一个文件

    os.remove('test.py')

  4. os.system() #运行shell命令

    >>> os.system('ls -l /root')

  5. os.path.split()

    函数返回一个路径的目录名和文件名

>>> os.path.split('/root/py')

('/root', 'py')

  1. os.path.isfile()和os.path.isdir(0函数分别检验给出的路径是一个文件还是目录

>>> os.path.isdir('/root')

True

>>> os.path.isfile('anaconda-ks.cfg')

True

  1. os.path.exists()函数,用来检验给出的目录或文件是否真的存在

>>> os.path.exists('/root')

True

>>> os.path.exists('/rooooooot')

False

  1. os.path.abspath(name) #获得绝对路径

>>> os.path.abspath('.')

'/root'

>>> os.path.abspath('py')

'/root/py'

  1. os.path.getsize(name) #获得文件或目录大小

    >>> os.path.getsize('/root')

    4096

    >>> os.path.getsize('/root/py')

    4096

    >>> os.path.getsize('anaconda-ks.cfg')

    1067

(11)os.path.basename() #返回文件名

>>> os.path.basename('/root/anaconda-ks.cfg')

'anaconda-ks.cfg'

(12) os.path.dirname() #返回文件路径

>>> os.path.dirname('/root/anaconda-ks.cfg')

'/root'

(13) os.remove() #删除文件

os.remove('/root/test.sh')

(14) os.rmdir() #删除目录

os.rmdir('test')

(15) os.mkdir() #建立指定目录

>>> os.mkdir('/root/dir') #建立一个目录

>>>os.makedirs('/root/test/dir/jack') #建立多个目录

  1. logging模块的使用

    python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SNMP,Socket等,甚至可以自己实现具体的日志记录方式。

    1、logging使用

>>> import logging

>>> logging.debug('this is a debuf')

>>> logging.warning('this is a debuf')

WARNING:root:this is a debuf #默认只有warning级别打印到屏幕

日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG >NOTSET

  1. 通过logging.basicConfig函数对日志的输出格式及方式做相关配置

    logging.basicConfig函数各参数:

    filename:指定日志文件名

    filemode:和file函数意义相同,指定日志文件的打开模式,'w'或'a'

    format:指定输出的格式和内容,format可以输出很多有用信息,如下所示:

    %(levelno)s:打印日志级别的数值

    %(levelname)s:打印日志级别名称

    %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]

    %(filename)s:打印当前执行程序名

    %(funcName)s:打印日志的当前函数

    %(lineno)d:打印日志的当前行号

    %(sactiome)s:打印日志的时间

    %(thread)d:打印线程ID

    %(threadName)s:打印线程名称

    %(process)d:打印进程ID

    %(message)s: 打印日志信息

Datefmt:指定时间格式,同time.strftime()

Level:设置日志级别,默认为logging.WARNING

Stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略。

  1. time模块的使用

    time模块时python的时间模块,在开始之前,首先说明一下几点:

    1. python中,通常有这几种方式来表示时间:1、时间戳2、格式化的时间字符串3、元组(struct_time)共九个元素。由于python的time模块实现主要调用C库,所以各个平台可能有所不同。
    2. UTC(Coordnated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8.DST(Daylight Saving Time)即夏令时
    3. 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日08:00:00开始按秒计算的偏移量。运行"type(time。Time())",返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
    4. 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
    1. 查看当前时间
      1. time_time() #获取当前时间戳

>>> time.time()

1441255787.3995078 #时间戳是按秒计算偏移量

  1. time.localtime()当前时间的struct_time(元组)形式

    >>> time.localtime()

    time.struct_time(tm_year=2015, tm_mon=9, tm_mday=3, tm_hour=12, tm_min=50, tm_sec=57, tm_wday=3, tm_yday=246, tm_isdst=0)

    time.localtime()输出说明

索引(Index)

属性(Attribute)

值(Values)

0

tm_year(年)

比如2013

1

tm_mon(月)

1-12

2

tm_mday(日)

1-31

3

tm_hour(时)

1-23

4

tm_min(分)

0-59

5

tm_sec(秒)

0-61

6

tm_wday(weekday)

0-6(0表示周日)

7

tm_yday(一年中第几天)

1-366

8

tm_isdst(是否是夏令时)

默认为-1

  1. time.ctime()当前时间的字符串形式

>>> time.ctime()

'Thu Sep 3 13:02:38 2015'

  1. 其他相关函数
    1. Gmtime()函数

      #gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time

>>> time.gmtime()

time.struct_time(tm_year=2015, tm_mon=9, tm_mday=3, tm_hour=5, tm_min=4, tm_sec=46, tm_wday=3, tm_yday=246, tm_isdst=0)

#查看格林威治标准时间

  1. Mktime()函数

    将一个struct_time或者9个参数的时间元组转化为时间戳

>>> time.localtime()

time.struct_time(tm_year=2015, tm_mon=9, tm_mday=3, tm_hour=13, tm_min=6, tm_sec=58, tm_wday=3, tm_yday=246, tm_isdst=0) #查看当前时间元组

>>> time.mktime(time.localtime())

1441256956.0 #把当前时间元组转为时间戳

>>> time.mktime((2015,9,3,2,2,9,3,127,0))

1441216929.0 #把这个元组转为时间戳

  1. Strftime函数—把一个代表时间的元组或者struct_time(如由time.localtime()和time.gtime()返回)转化为格式化的时间字符串。如果tuple未指定,将转入time.localtime()。

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

'2015-09-03 13:16:10' #把当前时间转换为字符串日期

日期格式参数说明:

格式

含义

%a

本地(locale)简化星期名称

%A

本地完整星期名称

%b

本地简化月份名称

%B

本地完整月份名称

%c

本地相应的日期和时间表示

%d

一个月中的第几天(01-31)

%H

一天中的第几个小时(24小时制,00-23)

%I

第几个小时(12小时制,01-12)

%j

一年中的第几天(001-366)

%m

月份(01-12)

%M

分钟数(00-59)

%p

本地am或者pm的相应符

%S

秒(01-61)

%U

一年中的星期书。(00-53星期天是一个星期的开始)第一个星期之前的所有天数都放在第0周

%w

一个星期中的第几天(0-6,0是星期天)

%W

和%u基本相同,不同的是%W以星期一为一个星期的开始

%x

本地相应日期

%X

本地相应时间

%y

去掉世纪的年份(00-99)

%Y

完整的年份

%Z

时区的名字(如果不存在为空字符)

%%

'%'字符

posted @ 2015-11-10 22:01  【风语】  阅读(622)  评论(0编辑  收藏  举报