python 干货走一波

可以简便的方法:

(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]

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.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:

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

去掉前后空格

s = " hello world "

pattern = re.compile(r'(^\s+)(\w.*)(\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:

else:

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")

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

12.copy 与 deepcopy 区别

见总结文档

13.%r 与 %s 区别

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

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

实例:

打印数字类型,二者一样

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

打印日期类型:

d = datetime.date.today()

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):

对其扩展加入一些步骤

(1)固定参数

def deco(hello):

def x(name):

hello(name)

return xbr/>@deco

def hello(o):

(2)不固定参数

def deco(hello):

def x(*args, **kargs):

hello(*args, **kargs)

return x

@deco

def hello(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 回帖
请输入回帖内容 ...
  • fengwujiutian

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

  • 其他回帖
  • zzlzy1989

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

  • yuze

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

  • yuze

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

  • 查看更多回帖