python基础1
开发环境
virtualenv
virtualenv env1 虚拟环境生成
source activate 激活环境
deactive 退出环境
pip 安装
github package安装
pip install git+git://github.com/jkbr/httpie.git
pip install git+https://github.com/jkbr/httpie.git
基本运算
三元运算(三目运算),是对简单的条件语句的缩写。
result = 值1 if 条件 else 值2
# 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等) 去空格及特殊符号 s.strip() .lstrip() .rstrip(',') 复制字符串 #strcpy(sStr1,sStr) sStr= 'strcpy' sStr = sStr sStr= 'strcpy' print sStr 连接字符串 #strcat(sStr1,sStr) sStr= 'strcat' sStr = 'append' sStr+= sStr print sStr 查找字符 #strchr(sStr1,sStr) sStr= 'strchr' sStr = 's' nPos = sStr1.index(sStr) print nPos 比较字符串 #strcmp(sStr1,sStr) sStr= 'strchr' sStr = 'strch' print cmp(sStr1,sStr) 扫描字符串是否包含指定的字符 #strspn(sStr1,sStr) sStr= '1345678' sStr = '456' #sStrand chars both in sStrand sStr print len(sStrand sStr) 字符串长度 #strlen(sStr1) sStr= 'strlen' print len(sStr1) 将字符串中的大小写转换 #strlwr(sStr1) sStr= 'JCstrlwr' sStr= sStr1.upper() #sStr= sStr1.lower() print sStr 追加指定长度的字符串 #strncat(sStr1,sStr,n) sStr= '1345' sStr = 'abcdef' n = 3 sStr+= sStr[0:n] print sStr 字符串指定长度比较 #strncmp(sStr1,sStr,n) sStr= '1345' sStr = '13bc' n = 3 print cmp(sStr1[0:n],sStr[0:n]) 复制指定长度的字符 #strncpy(sStr1,sStr,n) sStr= '' sStr = '1345' n = 3 sStr= sStr[0:n] print sStr 将字符串前n个字符替换为指定的字符 #strnset(sStr1,ch,n) sStr= '1345' ch = 'r' n = 3 sStr= n * ch + sStr1[3:] print sStr 扫描字符串 #strpbrk(sStr1,sStr) sStr= 'cekjgdklab' sStr = 'gka' nPos = -1 for c in sStr1: if c in sStr: nPos = sStr1.index(c) break print nPos 翻转字符串 #strrev(sStr1) sStr= 'abcdefg' sStr= sStr1[::-1] print sStr 查找字符串 #strstr(sStr1,sStr) sStr= 'abcdefg' sStr = 'cde' print sStr1.find(sStr) 分割字符串 #strtok(sStr1,sStr) sStr= 'ab,cde,fgh,ijk' sStr = ',' sStr= sStr1[sStr1.find(sStr) + 1:] print sStr 或者 s = 'ab,cde,fgh,ijk' print(s.split(',')) 连接字符串 delimiter = ',' mylist = ['Brazil', 'Russia', 'India', 'China'] print delimiter.join(mylist) PHP 中 addslashes 的实现 def addslashes(s): d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"} return ''.join(d.get(c, c) for c in s) s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0" print s print addslashes(s) 只显示字母与数字 def OnlyCharNum(s,oth=''): s = s.lower(); fomart = 'abcdefghijklmnopqrstuvwxyz013456789' for c in s: if not c in fomart: s = s.replace(c,''); return s; print(OnlyStr("a000 aa-b"))
数据结构操作
除去list空元素
pattern
['one', 'two', 'three', 'four', '']
while '' in pattern:
pattern.remove('')
pattern
['one', 'two', 'three', 'four']
除去list重复元素
方法一:
list = ['a','b','b','c']
resultList = []
for item in list:
if item not in resultList:
resultList.append(item)
resultList
['a', 'b', 'c']
方法二:
list = ['a','b','b','c'] sorted(set(list),key=list.index)
list ['a', 'b', 'c']
遍历索引遍历元素
ls = [1, 2, 3, 4, 5]
for index, item in enumerate(ls):
print(index, item)
计算文件行数
count = len(open('file1.txt', 'r').readlines())
print(count)
filter,map,reduce,lamda
#filter
def f(x):
return x % 2 != 0 and x % 3 != 0
res = list(filter(f, range(2, 25)))
print(res)
res = list(filter(None, range(1, 5)))
print(res)
#map
def cube(x):
return x * x * x
res = list(map(cube, range(1, 5)))
print(res)
def add(x, y):
return x + y
res = list(map(add, range(5), range(5)))
print(res)
def func(x, y):
return x, y
num = [0, 1, 2, 3, 4, 5, 6]
weekday = ['Sun', 'M', 'T', 'W', 'T', 'F', 'S']
res = list(map(func, num, weekday))
print(res)
#reduce
from functools import reduce
res = reduce(lambda x, y: x + y, range(1, 101))
print(res)
函数
1 a = [1,2,3] 2 b = [4,5,6] 3 4 list(zip(a,b)) 5 [(1, 4), (2, 5), (3, 6)] 6 7 8 9 a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 10 #将a看作是一个参数 11 list(a) 12 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 13 14 #将a看作是一个参数的集合,行列互换 15 list(zip(*a)) 16 [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 17 18 list(map(list,zip(*a))) 19 [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 20 21 等价于 22 [ [row[col] for row in a] for col in range(len(a[0]))] 23 24 25 a = [1,2,3] 26 b = [4,5,6] 27 zipped = list(zip(a,b)) 28 zipped 29 [(1, 4), (2, 5), (3, 6)] 30 list(map(list,zipped)) 31 [[1, 4], [2, 5], [3, 6]]
输入和输出
数字格式化
运行示例,因此你可以运行: print("{:.2f}".format(3.1415926)); 来得到第一个示例的输出。
| 数字 | 格式 | 输出 | 描述 |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
| 3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
| -1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
| 2.71828 | {:.0f} | 3 | 不带小数 |
| 5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
| 5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
| 10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
| 1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
| 0.25 | {:.2%} | 25.00% | 百分比格式 |
| 1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
| 13 | {:10d} | 13 | 右对齐 (默认, 宽度为10) |
| 13 | {:<10d} | 13 | 左对齐 (宽度为10) |
| 13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
日期和时间处理
参考 时间日期处理小结
正则表达式
(?P<name>...) 和 (?P=name) 用法
(?P<name>...) 指定名称
(?P=name) 引用名称
m = re.match('(?P<id1>\d)(?P<id2>\d)abc(?P=id2)(?P=id1)','12abc21') m.string
文件操作
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录:os.removedirs(r“c:\python”) 检验给出的路径是否是一个文件:os.path.isfile() 检验给出的路径是否是一个目录:os.path.isdir() 判断是否是绝对路径:os.path.isabs() 检验给出的路径是否真地存:os.path.exists() 返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt') 分离扩展名:os.path.splitext() 获取路径名:os.path.dirname() 获取文件名:os.path.basename() 运行shell命令: os.system() 读取和设置环境变量:os.getenv() 与os.putenv() 给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r' 指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' 重命名:os.rename(old, new) 创建多级目录:os.makedirs(r“c:\python\test”) 创建单个目录:os.mkdir(“test”) 获取文件属性:os.stat(file) 修改文件权限与时间戳:os.chmod(file) 终止当前进程:os.exit() 获取文件大小:os.path.getsize(filename) 文件操作: os.mknod("test.txt") 创建空文件 fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件 关于open 模式: w 以写方式打开, a 以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 (参见 w ) a+ 以读写模式打开 (参见 a ) rb 以二进制读模式打开 wb 以二进制写模式打开 (参见 w ) ab 以二进制追加模式打开 (参见 a ) rb+ 以二进制读写模式打开 (参见 r+ ) wb+ 以二进制读写模式打开 (参见 w+ ) ab+ 以二进制读写模式打开 (参见 a+ ) fp.read([size]) #size为读取的长度,以byte为单位 fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分 fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。 fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符 fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。 fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError fp.flush() #把缓冲区的内容写入硬盘 fp.fileno() #返回一个长整型的”文件标签“ fp.isatty() #文件是否是一个终端设备文件(unix系统中的) fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点 fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。 fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。 fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。 目录操作: os.mkdir("file") 创建目录 复制文件: shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件 shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录 复制文件夹: shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在 重命名文件(目录) os.rename("oldname","newname") 文件或目录都是使用这条命令 移动文件(目录) shutil.move("oldpos","newpos") 删除文件 os.remove("file") 删除目录 os.rmdir("dir")只能删除空目录 shutil.rmtree("dir") 空目录、有内容的目录都可以删 转换目录 os.chdir("path") 换路径
os.mknod("test.txt") 创建空文件 fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件 关于open 模式: w 以写方式打开, a 以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 (参见 w ) a+ 以读写模式打开 (参见 a ) rb 以二进制读模式打开 wb 以二进制写模式打开 (参见 w ) ab 以二进制追加模式打开 (参见 a ) rb+ 以二进制读写模式打开 (参见 r+ ) wb+ 以二进制读写模式打开 (参见 w+ ) ab+ 以二进制读写模式打开 (参见 a+ ) fp.read([size]) #size为读取的长度,以byte为单位 fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分 fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。 fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符 fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。 fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError fp.flush() #把缓冲区的内容写入硬盘 fp.fileno() #返回一个长整型的”文件标签“ fp.isatty() #文件是否是一个终端设备文件(unix系统中的) fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点 fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。 fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。 fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。 目录操作: os.mkdir("file") 创建目录 复制文件: shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件 shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录 复制文件夹: shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在 重命名文件(目录) os.rename("oldname","newname") 文件或目录都是使用这条命令 移动文件(目录) shutil.move("oldpos","newpos") 删除文件 os.remove("file") 删除目录 os.rmdir("dir")只能删除空目录 shutil.rmtree("dir") 空目录、有内容的目录都可以删 转换目录 os.chdir("path") 换路径
1 # -*- coding:utf-8 -*- 2 import re 3 import os 4 import time 5 #str.split(string)分割字符串 6 #'连接符'.join(list) 将列表组成字符串 7 def change_name(path): 8 global i 9 if not os.path.isdir(path) and not os.path.isfile(path): 10 return False 11 if os.path.isfile(path): 12 file_path = os.path.split(path) #分割出目录与文件 13 lists = file_path[1].split('.') #分割出文件与文件扩展名 14 file_ext = lists[-1] #取出后缀名(列表切片操作) 15 img_ext = ['bmp','jpeg','gif','psd','png','jpg'] 16 if file_ext in img_ext: 17 os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext) 18 i+=1 #注意这里的i是一个陷阱 19 #或者 20 #img_ext = 'bmp|jpeg|gif|psd|png|jpg' 21 #if file_ext in img_ext: 22 # print('ok---'+file_ext) 23 elif os.path.isdir(path): 24 for x in os.listdir(path): 25 change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用 26 27 28 img_dir = 'D:\\xx\\xx\\images' 29 img_dir = img_dir.replace('\\','/') 30 start = time.time() 31 i = 0 32 change_name(img_dir) 33 c = time.time() - start 34 print('程序运行耗时:%0.2f'%(c)) 35 print('总共处理了 %s 张图片'%(i)) 36 37 输出结果: 38 39 程序运行耗时:0.11 40 总共处理了 109 张图片
1 import smtplib 2 import sys 3 import email.mime.text 4 # my test mail 5 mail_username='mail1@gmail.com' 6 mail_password='pwd' 7 from_addr = mail_username 8 to_addrs= ('mail1@gmail.com','mail2@gmail.com') 9 10 # HOST & PORT 11 HOST = 'smtp.gmail.com' 12 PORT = 25 13 14 # Create SMTP Object 15 smtp = smtplib.SMTP() 16 print('connecting ...') 17 18 # show the debug log 19 smtp.set_debuglevel(1) 20 21 # connet 22 try: 23 print(smtp.connect(HOST,PORT)) 24 except: 25 print('CONNECT ERROR ****') 26 27 smtp._host = 'smtp.gmail.com' 28 smtp.ehlo() 29 # gmail uses ssl 30 smtp.starttls() 31 # login with username & password 32 try: 33 print('logining ...') 34 smtp.login(mail_username,mail_password) 35 except: 36 print('LOGIN ERROR ****') 37 # fill content with MIMEText's object 38 msg = email.mime.text.MIMEText('Hi ,I am stone') 39 msg['From'] = from_addr 40 msg['To'] = ';'.join(to_addrs) 41 msg['Subject']='hello , today is a special day' 42 print(msg.as_string()) 43 smtp.sendmail(from_addr,to_addrs,msg.as_string()) 44 smtp.quit()
浙公网安备 33010602011771号