python 干货走一波

本贴最后更新于 1371 天前,其中的信息可能已经时过境迁

可以简便的方法:

(1)lambda x,y:x*y

(2)list1 = list(filter(lambda x:x%3 == 0,range(100)))

filter 第一个参数是过滤条件,第二个是要过滤 的内容

返回值是个Object,得转换为其他类型

(3)map: list1 = map(lambda x:x**2,[1,2,3,4,5])

第一个是处理条件,第二个是序列

返回值是Object

(4)[i for i in range(10) if i%2 ==0] 直接生成列表

1.缩进是python的灵魂

2.获取变量类型,type(),isinstance(,)

3.s为字符串

4.怎么才能让int四舍五入?

int(x+0.5)

5.python3支持中文变量名,但源码是utf-8

6.python对象3个特性:身份,类型,值

7.python数字类型:int,long,float,boolean,complex(复数),

字符类型:string

序列类型:字典,元组,列表

8.典型python文件结构:

(1)起始行 #/usr/bin/env/python

(2) 模块文档 "this is a test module"

(3) 模块导入 import os

(4) (全局)变量定义 debug = True

(5) 类定义(若有) class FooClass(Object):

pass

(6) 函数定义: def test():

(7) 主程序 if name = "main"

9.元组不可变,列表可变,字典可变

10.set函数,去除集合中重复元素,li = set(list2)

11.两个集合求交集:list1 & list2,求并集:list1 | list2

parent

--_init.py

--child

-- _init.py

--a.py

目录结构如上,如果要引用a文件,可这样

import sys,os

sys.path.append(os.getcwd()+"\parent\child")

from a import func

13.os.walk(path)

14.p,f = os.path.split(spath) 分隔目录和文件名

drv,left = os.path.splitdrive(spath) 分隔盘符和文件名

f,ext = os.path.splitext(spath) 分隔文件和扩展名

15.时间处理

16.三目运算符:sm = x if x>y else y

17.None表示空类型

18.a=[1,2,3] b=[1,2,4] id(a[1]) == id(b[1]) True

19.python是基于值的内存管理方式,不同变量的值 如果相等,则他们的内存地址id(变量名)也相等

20.dict.get(key,error) 有则返回值,无则返回提示

21.列表:

append(),intsert(1,'two'),extend(),sort(),reverse(),list[:],pop(),del li[0],copy(),clear()

[i for i in range(10) if i>10]

23.元组:x = 1, x = 1,2,3

24.x = (1,2,3,4)

2,3之间插入5

x[:2] + ('5',) + x[2:]

25.python内置方法:

divmod(10,2) 返回10对2的除法和余数

pow(x,y,z) x的y次方,如果z存在,则%z

float,int,long,list,tuple,str,dict 转换为其类型

round四舍五入 sum求和

isinstance(1,int) 前者是否属于后者类型

'I am ,I like'.format('xy','d')

enumerate,返回一个可枚举的对象(tuple)

set

sorted 排序

all(集合) 集合中所有的元素都为真才为真

any(集合) 集合中有一个元素都为真才为真

cmp(x,y) x<y 返回负数 x==y返回0 x>y返回正数

next() 返回迭代对象中的下一个元素

reversed(range(10)) 逆置对象

sorted() 对对象进行排序,返回一个新的列表

zip 返回元组型

x = [1,2,3]

y = [4,5,6,7]

print(list(zip(x,y))) [(1, 4), (2, 5), (3, 6)]

map: list1 = map(lambda x:x**2,[1,2,3,4,5])

第一个是处理条件,第二个是序列

返回值是Object

filter: list1 = list(filter(lambda x:x%3 == 0,range(100)))

filter 第一个参数是过滤条件,第二个是要过滤的内容

返回值是个Object,得转换为其他类型

help() 返回对象的帮助信息

input 读取用户输入的信息

open 打开文件

exec 执行动态语句块 exec('a=1+2')

26.使用函数名doc可以查看函数文档

27.闭包函数:

def fun1(x):

def fun2(y):

return xy

return fun2

28.字符串处理:

capitalize() 首字母大写

title 首字母小写

replace('1','2') 替换

upper 全部大写

lower 全部小写

swapcase 大小写互换

lstrip 去掉左空格 strip 左右 rstrip右空格

split

startswith 以。。开头 endswith以。。结尾

s.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。

s.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。

s.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。

s.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。

s.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。

s.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。

s.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。

replace

find('t') 有则返回位置,无则返回-1

count('t') 字符串中数量

29.关键字:global 修改函数外的全局变量,nonlocal内部函数修改外部函数的局部变量

30.lambda函数:

g = lambda x,y:xy

g(2,3) ---------6

31.字典:d =

访问:d[k],d.get(k)

修改:d[k] = 'v2'

删除:del d[k] 删除一个

d.clear() 清空所有

del dict 删除字典

d.items() 返回(键,值)元组

d.key()

d.values()

d.pop(k) 删除并返回值

x = {}

x = x.fromkeys((1,2,3),'a')

set

特点:无序,不能通过索引或执行切片操作

frozenset() 不可修改的集合

创建:

a =

a = set('boy')

a = set(['a','b','c','d'])

比较:s = b =

s.difference(b) //找到s中存在,b中不存在的集合,返回新值

添加:s.add()

删除:discard s.discard(3) //删除不存在的元素不会报错

remove s.remove(3) //删除不存在的元素会报错

pop s.pop() //删除最后一个元素并返回新值

取交集: s = b =

s.intersection(b) //取交集,赋给新值

判断: s = b =

s.isdisjoint(b) //判断是否不存在交集(有交集False,无交集True)

s.issubset(b) //判断s是否是b的子集合

s.issuperset(b) //判断s是否是b的父集合

取并集:s = b =

s.union(b) //取并集,并赋新值

更新:s = b =

s.update(b)

print(s)

33.文件处理:

r 只读 r+读写 w可写,存在则覆盖 w+读写,存在则覆盖 a追加,不存在则创建

f.read() 读取文件全部内容为一个str

f.readline() 读取一行

f.readlines() 读取所有行,放到一个list中

f.write() 只可写字符串

f.writelines() 可写序列

当出现提示乱码时:添加encoding='UTF-8'

open('', 'w+', encoding='UTF-8')

xlrd处理表格

#打开文件

workbook = xlrd.open_workbook(r'F:')

#获取所有sheet

workbook.sheet_names() 返回一个列表

#根据sheet索引或者名称获取sheet内容

sheet2 = workbook.sheet_by_index(1)

sheet2 = workbook.sheet_by_name('sheet2')

#获取sheet2的名称,行数,列数

sheet2.name,sheet2.nrows,sheet2.ncols

#获取整行和整列的值(数组)

rows = sheet2.row_values(3) #第四行内容

cols = sheet2.col_values(2) #第三列内容

#获取单元格内容

sheet2.cell_value(1,0).encode('utf-8')

#获取单元格内容的数据类型

sheet2.cell(1,0).ctype

xlwt 写文件

#创建工作簿

f = xlwt.Workbook(encoding='utf-8')

#创建第一个sheet

sheet1 = f.add_sheet('sheet1')

#写数据,对应 行 列 值

sheet1.write(0,1,label = 'this is the test')

#保存

f.save('xx.xlsx')

os模块

示例目录:path = C:\Users\hwx518534\Desktop

os.name nt/posix

os.getcwd() 得到当前工作目录

os.curdir 当前目录

os.listdir(path) 返回指定目录下的所有文件和目录名 列表

os.remove() 删除一个文件

os.rename() 重命名

os.system() 执行系统命令

os.mkdir()

os.rmdir() 删除文件夹,文件夹须为空

os.unlink(path) 删除path下所有文件

os.exit() 终止当前进程

os.chdir() 改变当前目录

os.walk() 返回三元组 第一个是文件夹地址 第二个是list,当前文件夹下所有目录名字(不包括子目录)

第三个返回的是list,返回的是该文件夹下的所有文件(不包括子目录)

os.path模块

示例目录:path = C:\Users\hwx518534\Desktop\temp.py

os.path.abspath(file) 当前文件的绝对路径

os.path.dirname() 获取当前文件目录 C:\Users\hwx518534\Desktop

os.path.split() 返回一个路径的目录名和文件名 ('C:\Users\hwx518534\Desktop', 'temp.py')

os.path.isfile() os.path.isdir 检测是否是文件或目录

os.path.exists() 检测路径是否存在

os.path.getsize() 获得文件大小(字节),如果是目录返回0L,

os.path.splitext() 分离文件名与扩展名

os.path.join() 连接目录与文件名 返回值为路径

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

_开头变量含义

_xx表示受保护变量,不能通过from x import x 导入,可在对象和子类中访问

x表示系统定义的特殊变量

__xx 私有成员,只有类对象自己可以访问

time模块

time.time() 纪元开始的秒数

time.ctime() Wed Jan 31 17:50:57 2018

time.localtime() time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=51, tm_sec=54, tm_wday=2, tm_yday=31, tm_isdst=0)

s = time.gmtime() s.tm_year ---2018

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

2018-01-31 18:06:25

38.shutil模块 --- 高级的文件,文件夹,压缩包处理模块

shutil.copyfileobj(open('xx.py','r'),open('x.txt','w')) -- 拷贝文件内容到另一个文件

shutil.copyfile('xx.py','x1.py') --拷贝文件到另一个文件

shutil.copystat(src,dst) --仅拷贝状态信息

shutil.copy(src,dst) --拷贝文件和状态

shutil.copytree('folder1','folder2') --递归拷贝文件夹

shutil.rmtree('f1') --递归删除文件(夹)

shutil.move(src,dst) --重命名

39.常见异常

AssertionError 断言语句失败

AttributeError 未知的对象属性

IndexError 索引序列超出范围

KeyError 字典中查找一个不存在的关键字

NameError 尝试访问一个不存在的变量

OSError 操作系统产生的异常

FileNotFoundError 文件未找到

SyntaxError 语法异常

TypeError 不同类型间的操作异常

ZeroDivisionError 除数为0异常

40.面像对象

init方法,预处理

__name ,私有变量,只能通过内部去访问,但是是伪装的还可以这样访问

p = Fish()

p._Fish__name

41.正则表达式

字符:

.:匹配任意字符 a.c ---abc

:转义字符 a.c --- a.c

[...]:匹配括号中的任意一个 a[bx]c --abc,axc

预定义字符集:

\d:匹配数字[0-9] a\dc --a0c,a1c

\D:匹配非数字[^\d] a\Dc --amc,abc

\s:匹配空白字符[<空格>\t\r\n\f\v] a\sc -- a c

\S:匹配非空白字符[^\s] a\Sc -- abc

\w:匹配单词字符[A-Za-z0-9_] a\wc -- abc

\W:匹配非单词字符[^\w] a\Wc --a c

数量词:

:匹配前一个字符0或多次 abc ----ab,abc,abcccc

+:匹配前一个字符1或多次 abc+ -----abc,abccc

?:匹配前一个字符0或1次 abc? ----ab,abc

:匹配前一个字符m次 ac -- aac

:匹配前一个字符m次-n次 ac -- ac aac

边界匹配:

^:匹配以。。开头的 ^a ----abc

:匹配以。。结尾的 c ----abc

贪心模式:.

非贪心模式: .?

匹配或:

(a|b|c) 不能使用[a|b|c]

flag:

re.I:IGNORECASE,忽略大小写

re.M:re.MULTILINE,多行模式,改变^和$的行为

re.S:re.DOTALL,点任意匹配模式,改变.的行为

pattern = re.compile(r'one')

str = 'one1two2three3four4five5'

(1)re.match() 只从开头匹配,有则返回,无则None

x = re.match(pattern,str) x.group() === one

pattern = re.compile(r'ne')

x = re.match(pattern,str) x.group() === None

(2)re.search() 扫描整个str,有则匹配,匹配完成就返回,无则None

pattern = re.compile(r'ne')

x = re.search(pattern,str) x.group() === ne

(3)re.split() 返回列表 根据可匹配的子串将字符串分隔

pattern = re.compile(r'\d+')

x = re.split(pattern,str) x === ['one','two','three','four','five']

(4)re.findall() 以列表形式返回所有匹配的子串

pattern = re.compile(r'\d+')

x = re.findall(pattern,str) x === ['1','2','3','4','5']

(5)re.finditer() 返回一个顺序访问第一个匹配结果的迭代器

pattern = re.compile(r'\d+')

x = re.finditer(pattern,str)

for m in x:

print(m) 1 2 3 4 5

(6)re.sub(pattern,匹配到的处理,待处理的字符串) 返回值为处理后的字符串

去掉前后空格

s = " hello world "

pattern = re.compile(r'(^\s+)(\w.*)(\s+$)')

print(re.sub(pattern, r'\2', s))

t = threading.Thread(targets=func,args=(1,2,...png))

t.setDeamon(True) //设置为守护进程,随着主进程一起退出,写在t.start()前面

t.start() //启动线程

t.join(x) //x代表秒数,可为空,为空时表示子线程执行时父线程阻塞,不为空时表示子线程执行x秒后,父线程执行

datetime.datetime.fromtimestamp(time.time())

datetime.datetime(2015, 2, 27, 11, 13, 0, 604980)

44.python导包顺序:

当前目录---当前项目---pythonpath---python中lib文件夹---python中lib文件夹下的site-pakage

45.sys模块

sys.path 返回模块的搜索路径

sys.exit() 退出当前程序

sys.argv[0] 返回参数 0返回当前文件名称 1,2,3。。返回参数

sys.modules.keys() 返回所有已经导入的模块列表

sys.platform 返回操作系统平台名称

sys.getdefaultencoding() 获取编码

sys.setdefaultencoding('utf-8') 设置脚本编码

46.chr(64) -- 根据ascii码转换为字符

ord('a') -- 根据字符转换为ascii码

47.openpyxl

新建: wb = openpyxl.Workbook()

删除工作表 wb.remove(sheet)

读取一个表格 wb = openpyxl.load_workbook('')

获取所有工作表名 sheets = wb.get_sheet_names()

获取某一个特定的工作表 sheet = wb.get_sheet_by_name('Sheet2')

获取工作表的表名 sheet_name = sheet.title

获取激活的工作表 sheet = wb.active

获取单元格内容 a = sheet['A2'] a = sheet.cell(1,2) a.value

获取行 sheet.rows

获取列 sheet.columns

获取最大行 sheet.max_row

获取最大列 sheet.max_column

给单元格赋值 sheet['A2'].value = 3

保存单元格 wb.save('')

48.下载图片,得到图片url

i = requests.get(url)

open('xx.png','wb').write(i.content)

习题总结:

1.range(100):0-99,range(1,101):1-100,range(1,101,2):1开始,101结束不包含101,每次增加2,range(10,0,-1):10开始,0结束但不包含0,每次增加-1

2.注释:单行:# 多行:'''内容'''

3.3//2 = 1 地板除(先对被除数进行四舍五入),得到的结果无条件截断

4.print方法 print(1,2,seq='&&' end='\t') 输出多个对象,用,隔开,对象间的分隔符

5.for index, data in enumerate(x) 遍历索引和数据

6.\起到换行的作用

x = 'ddddd\

sdfdsfsf'

7.多元赋值:(a,b,c) = (1,2,'string')

8.while-else

x = 13

while x > 10:

print(x)

else:

print('xx')

x += 1

迭代器和生成器

迭代器:

it = iter([1,2,3])

for i in it:print(i)

collections模块下的deque 双向队列 ---左右两端操作列表

import collections

d = collections.deque()

d.appendleft('1')

d.appendleft("2")

print(d)

返回值 :deque(['2', '1'])

12.copy与deepcopy区别

见总结文档

13.%r与%s区别

1.%r调用的是repr方法,%s调用的是str方法

2.%r打印时能显示出它所属的对象。

实例:

打印数字类型,二者一样

打印字符类型,%r打印出来的会带着单引号

打印日期类型:

d = datetime.date.today()

print('%r,%s' %(d,d)) ---- datetime.date(2018,6,8) 2018-06-08

14.python如何读取大文件

使用read()方法是一次性将文件内容读取并存在到内存中,一旦文件大小大于内存大小时,就会出现内存溢出

解决方法:

(1) 使用read(参数),指定读取大小 ,也可readline()一行一行读取,不能使用readlines()

(2)使用with open(filename,'r') as file: for i in file:...

(3)使用模块fileinput for line in fileinput.input('filename')

15.bin()转换为二进制

oct()转换为八进制

hex()转换为十六进制

16.装饰器

def hello(o):

print("hello,%s" % o, t)

对其扩展加入一些步骤

(1)固定参数

def deco(hello):

def x(name):

print("before myfunc()...")

hello(name)

print("after func()....")

return xbr/>@deco

def hello(o):

print("hello,%s" % o, t)

(2)不固定参数

def deco(hello):

def x(*args, **kargs):

print("before myfunc()...")

hello(*args, **kargs)

print("after func()....")

return x

@deco

def hello(o, t):

print("hello,%s,%s" % (o, t))

(3)一个函数可以有多个装饰器

17.方法名或类名获取

(1)方法名:方法名.name

(2)类名:self.class.name

(3)sys._getframe().f_code.co_name

and or

or:从左到右,返回每一个为真的值,若都为假,则返回最后一个值

and:从左到右,返回第一个为假的值,若都为真,则返回一个值

19.连接两个字符串:({} {}!).format('hello','world')

20.is比较的是内存值是否相同,==比较的是值是否相同

(1)a = [1,2,3]

b = a

a is b ---True

a ==b -----True

(2)a = [1,2,3]

b = a[:]

a is b ---False

a ==b ----True``

Process finished with exit code 0

5 回帖
请输入回帖内容 ...
  • yuze

    干活好多啊,就是看着有点累。

  • zzlzy1989

    😂 确实是干货,就是标点符号和换行得用用,赞一个

  • fengwujiutian

    改了下,这格式实在不好弄

  • fengwujiutian

    改了下,这格式实在不好弄啊

  • yuze

    markdown写文章完全不用担心格式问题啊,语法简单,20分钟入门,划算的生意。