python基础

1、python有三种文件类型

(1).py

python源码文件

(2).pyc

编译后的文件,通过下面的命令编译

import py_compile
py_compile.compile('hello.py')

( 3).pyo

优化后的源文件

python -O -m py_compile hello.py


2、python数据结构

字符串(String)  值不能改变  str1=’abcd‘

元组(tuple)值不能改变 tup1=(’abc‘,’bcd‘)

列表(list)值可以改变 list1=[’abc‘,’bcd‘],取值,添加,修改,删除,查找

字典(dic)key不能改变,value可以改变dic1={’name‘:’xx‘,’age’:25}  ,对键值的更新和删除,大小的比较,遍历


3、python的流控

3.1 if判断

if xx:

  xx

elif xx:

  xx

else:

  xx

3.2 for循环

for x in “xxx”:

   xx

else:

  xx

for k,v in dic.items():

  xx

else:

  xx

可以通过range生成循环个数

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(2,10,3)
[2, 5, 8]

3.3 while循环

while xx:

   xx

else:

  xx

可以通过help(list.append)去查看函数使用方法


4、函数

函数定义的是形参,def fun(xx):,可以给形参设置默认值,def fun(x,y='test'):,默认参数从右向左赋值。

函数调用,传得参数是实参,

函数传值,可以传入 元组和字典当作多个参数,例如

t=(x,y)

dic={x:'x',y:'y'}

fun(*t)

fun(**dic)

可以使用def fun(x,*args)*args元组的方式来接受冗余参数而不报错

    或者def fun(x,**args) **args字典的方式,接受y=xx的冗余参数

    或者def fun(x,*args,**kwargs) 可以接受任意参数

lambda匿名函数

   简短的函数定义,g = lambda  x,y : x+y

   lambda与reduce配合,reduce(lambda x,y:x*y , range(1,6))


使用字典实现switch

#!/usr/bin/python
def add(x,y):
    return x+y
def subtraction(x,y):
    return x-y
def multiplication(x,y):
    return x*y
def division(x,y):
    return x/y
operator={"+":add,"-":subtraction,"*":multiplication,"/":division}
def f(x,o,y):
    return operator.get(o)(x,y)

x=int(raw_input("input x: "))
o=raw_input("input operator: ")
y=int(raw_input("input y: "))
print "%d %s %d = %d" %(x,o,y,f(x,o,y))

5、常用的内置函数

str.capitalize()  首字母大写函数

str.replace()  替换函数

str.split() 分割函数

filter() 过滤函数

zip() 

map() 


6、模块和包

目录下有__init__.py,就可以当成包。

一个py文件就可以成为一个模块。

import,import as ,from import


7、正则表达式

元字符

[] 匹配一个字符,[ab] [a-z][^a-z]

^匹配开头

$匹配结尾

\ 转意字符  

   \d 十进制数字[0-9]  \D 非十进制数字[^0-9]

   \s任何空白字符[\t\n\f\r\v]  \S任何非空白字符[^\t\n\f\r\v] 

  \w 字母数字[0-9a-zA-Z_] \W非字母数字 [^0-9a-zA-Z_]

{}表示重复几次,\d{8} 代表 重复8次\d\d\d\d\d\d\d\d\d\d

   {m,n}最少重复m次,最大重复n次。{0,}与*相同,{1,}与+相同,{0,1}与?相同

  如:  

>>> import re
>>> r=r"\d{11}"
>>> re.findall(r,'12345678999')
['12345678999']
*表示将前面的字符重复0到max次,类似于{0} {1} ... {max}

>>> r=r"1[0-9]*"
>>> re.findall(r,'12345678999')
['12345678999']
+与*类似,但是至少出现一次

?表示匹配0次或者1次

>>> r=r"ab+"
>>> re.findall(r,'a')
[]
>>> re.findall(r,'ab')
['ab']
>>> re.findall(r,'abb')
['abb']
>>> r=r"ab?"
>>> re.findall(r,'a')
['a']
>>> re.findall(r,'ab')
['ab']
>>> re.findall(r,'abb')
['ab']

()用来分组,findall优先显示分组中的内容,在爬虫中经常用到:

>>> email=r"\w+@\w+\.com|\.cn"
>>> re.findall(email,'sk@xd.com')
['sk@xd.com']
>>> email=r"\w+@\w+(\.com|\.cn)"
>>> re.findall(email,'sk@xd.com')
['.com']
.* 表示匹配所有字符,a.*b匹配最长的从a到b的字符

.*? 贪婪匹配,a.*?b匹配最短的从a到b的字符


8、正则表达式的函数

(1)正则表达式的编译

对于常用的正则表达式,编译后使用可以提高效率。

>>> r1 = r"\d{3,4}-?\d{8}$"
>>> re_tel=re.compile(r1)
>>> re_tel.findall("010-12345678")
['010-12345678']
>>> re_tel.findall("0571-12345678")
['0571-12345678']
>>> re_tel.findall("057112345678")
['057112345678']
不区分大小写

>>> re_xd=re.compile(r"xd",re.I)
>>> re_xd.findall('xd')
['xd']
>>> re_xd.findall('xD')
['xD']
>>> re_xd.findall('XD')
['XD']
>>> re_xd.findall('Xd')
['Xd']
(2)re的其他函数

正则表达式的分割 re.split()

正则表达式的替换 re.sub() re.subn()
正则表达式中的匹配 re.match() ,如果匹配上了返回一个SRE.Match的对象,如果没有匹配上返回空。可以使用group(0)来获取值。

>>> import re
>>> email=r"\w+@\w+(\.com|\.cn)"
>>> re.findall(email,'sk@xd.com')
['.com']
>>> re.findall(email,'sk@xd.org')
[]
>>> re.match(email,'sk@xd.com')
<_sre.SRE_Match object at 0x7fed05a36558>
>>> re.match(email,'sk@xd.cn')
<_sre.SRE_Match object at 0x7fed05a36648>
>>> re.match(email,'sk@xd.org')
>>> re.match(email,'sk@xd.com').group(0)
'sk@xd.com'

9、爬虫

用到urllib的库去获取网页源码,下载网址的图片

#!/usr/bin/python
import re
import urllib

#获取网页源码
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

#定义正则表达式,匹配出所有jpg网址
#然后遍历网址,下载jpg文件
def getimage(html):
    jpg_re = r'"objURL":"(.*?\.jpg)"'
    image_re = re.compile(jpg_re)
    imagelist = re.findall(image_re,html)
    x = 1
    for imageurl in imagelist:
        urllib.urlretrieve(imageurl,'%s.jpg' % x)
        x+=1

html = getHtml("http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%D7%C0%C3%E6&hs=0&fr=ala&ori_query=%E6%A1%8C%E9%9D%A2&ala=0&alatpl=sp&pos=0")
getimage(html)

10、内存操作 之 赋值、浅拷贝、深拷贝

赋值:引用 

    a = b

浅拷贝:外层对象拷贝,内层对象引用

    b = copy.copy(a)  拷贝函数

    b = a[:]   切片

    b = list(a)   重新创建对象

深拷贝:外层和内层对象都是拷贝

    b = copy.deepcopy(a)

>>> import copy
>>> a = [1,2,3,['a','b','c']]
>>> b = a
>>> c = a[:]
>>> d = list(a)
>>> e = copy.copy(a)
>>> f = copy.deepcopy(a)
>>> id(a),id(b),id(c),id(d),id(e),id(f)
(140376746125648, 
 140376746125648, 
 140376746204480, 
 140376746204768, 
 140376746204840, 
 140376746204408)
>>> id(a[3]),id(b[3]),id(c[3]),id(d[3]),id(e[3]),id(f[3])
(140376746125720, 
 140376746125720, 
 140376746125720, 
 140376746125720, 
 140376746125720, 
 140376746204552)
>>> a,b,c,d,e,f
([1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']])
>>> a.append('d')
>>> a,b,c,d,e,f
([1, 2, 3, ['a', 'b', 'c'], 'd'], 
 [1, 2, 3, ['a', 'b', 'c'], 'd'], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']], 
 [1, 2, 3, ['a', 'b', 'c']])
>>> a[3].append('d')
>>> a,b,c,d,e,f
([1, 2, 3, ['a', 'b', 'c', 'd'], 'd'], 
 [1, 2, 3, ['a', 'b', 'c', 'd'], 'd'], 
 [1, 2, 3, ['a', 'b', 'c', 'd']], 
 [1, 2, 3, ['a', 'b', 'c', 'd']], 
 [1, 2, 3, ['a', 'b', 'c', 'd']], 
 [1, 2, 3, ['a', 'b', 'c']])

11、文件的读写操作

r 只读

r+ 读写

w 写文件,如果没有文件新创建文件

w+ 读写文件,如果没有文件新创建文件

a  写文件,追加写入,没有文件新建

a+ 读写文件,追加写入,没有文件新建

b 二进制打开

U 支持换行符

>>> fnew=open('new.txt','w+')
>>> fnew.write('hello new file')
>>> fnew.close()

12、文件的其他函数




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值