重慶分公司,新征程啟航
為企業(yè)提供網站建設、域名注冊、服務器等服務
為企業(yè)提供網站建設、域名注冊、服務器等服務
首先定義一個函數判斷是否為素數,如果這個數能被2~它的平方根中的任一數整除的話它就不是素數,否則就是素數。用flag為0或1標記,利用filter()篩掉flag為0的非素數。
創(chuàng)新互聯(lián)是一家集網站建設,錯那企業(yè)網站建設,錯那品牌網站建設,網站定制,錯那網站建設報價,網絡營銷,網絡優(yōu)化,錯那網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。
#!/usr/bin/env?python
#coding:utf-8
import?math
def?filter_prime(n):????#定義filter_prime函數
flag?=?1????#設置flag,初始化為1
for?i?in?range(2,?int(math.sqrt(n)+1)):?????#取2至平方根的數
if?n%i?==?0:????#判斷是否是素數
flag?=?0?????#如果不是,flag設為0
if?flag?==?1:????????#退出循環(huán)后判斷flag,若為1(素數),則返回
return?n
print?filter(filter_prime,?range(1,101))????#filter?1-100里的非素數
我D盤沒有對應的文件,按代碼,flag一直是False,所以執(zhí)行except語句和finally下的else語句。
總體來說:
1、f_n是文件路徑及文件;
2、flag是個判斷標志
3、將打開f_n的操作放在異常捕獲代碼中,如果正常打開,flag=True,如果不能正常打開,執(zhí)行except下的語句。
4、最后執(zhí)行finally下的語句,如果flag=True ,就關閉文檔,并輸出內容,如果是False,就輸出程序關閉。
#!python
def?mySum():
nlist=[]
sumlist=[]
sum=0
flag=True
while(flag):
n?=?int(raw_input("Input?a?number:"))
nlist.append(n)
sum+=n
sumlist.append(sum)
print?nlist
print?sumlist
nextStep=raw_input("Continue,?yes/no?")
if?nextStep=='yes':
flag=True
else:
flag=False
mySum()
運算
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值為:", c
c = a - b
print "2 - c 的值為:", c
c = a * b
print "3 - c 的值為:", c
c = a / b
print "4 - c 的值為:", c
c = a % b
print "5 - c 的值為:", c
a = 2
b = 3
c = a**b
print "6 - c 的值為:", c
a = 10
b = 5
c = a//b
print "7 - c 的值為:", c
python比較
a = 21
b = 10
c = 0
if ( a == b ):
print "1 - a 等于 b"
else:
print "1 - a 不等于 b"
if ( a != b ):
print "2 - a 不等于 b"
else:
print "2 - a 等于 b"
if ( a b ):
print "3 - a 不等于 b"
else:
print "3 - a 等于 b"
if ( a b ):
print "4 - a 小于 b"
else:
print "4 - a 大于等于 b"
if ( a b ):
print "5 - a 大于 b"
else:
print "5 - a 小于等于 b"
a = 5
b = 20
if ( a = b ):
print "6 - a 小于等于 b"
else:
print "6 - a 大于 b"
if ( b = a ):
print "7 - b 大于等于 a"
else:
print "7 - b 小于 a"
賦值
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值為:", c
c += a
print "2 - c 的值為:", c
c *= a
print "3 - c 的值為:", c
c /= a
print "4 - c 的值為:", c
c = 2
c %= a
print "5 - c 的值為:", c
c **= a
print "6 - c 的值為:", c
c //= a
print "7 - c 的值為:", c
邏輯運算符:
a = 10
b = 20
if ( a and b ):
print "1 - 變量 a 和 b 都為 true"
else:
print "1 - 變量 a 和 b 有一個不為 true"
if ( a or b ):
print "2 - 變量 a 和 b 都為 true,或其中一個變量為 true"
else:
print "2 - 變量 a 和 b 都不為 true"
a = 0
if ( a and b ):
print "3 - 變量 a 和 b 都為 true"
else:
print "3 - 變量 a 和 b 有一個不為 true"
if ( a or b ):
print "4 - 變量 a 和 b 都為 true,或其中一個變量為 true"
else:
print "4 - 變量 a 和 b 都不為 true"
if not( a and b ):
print "5 - 變量 a 和 b 都為 false,或其中一個變量為 false"
else:
print "5 - 變量 a 和 b 都為 true"
in,not in
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
print "1 - 變量 a 在給定的列表中 list 中"
else:
print "1 - 變量 a 不在給定的列表中 list 中"
if ( b not in list ):
print "2 - 變量 b 不在給定的列表中 list 中"
else:
print "2 - 變量 b 在給定的列表中 list 中"
a = 2
if ( a in list ):
print "3 - 變量 a 在給定的列表中 list 中"
else:
print "3 - 變量 a 不在給定的列表中 list 中"
條件
flag = False
name = 'luren'
if name == 'python': # 判斷變量否為'python'
flag = True # 條件成立時設置標志為真
print 'welcome boss' # 并輸出歡迎信息
else:
print name
num = 5
if num == 3: # 判斷num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num 0: # 值小于零時輸出
print 'error'
else:
print 'roadman' # 條件均不成立時輸出
循環(huán)語句:
count = 0
while (count 9):
print 'The count is:', count
count = count + 1
print "Good bye!"
i = 1
while i 10:
i += 1
if i%2 0: # 非雙數時跳過輸出
continue
print i # 輸出雙數2、4、6、8、10
i = 1
while 1: # 循環(huán)條件為1必定成立
print i # 輸出1~10
i += 1
if i 10: # 當i大于10時跳出循環(huán)
break
for letter in 'Python': # 第一個實例
print '當前字母 :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二個實例
print '當前水果 :', fruit
print "Good bye!"
獲取用戶輸入:raw_input
var = 1
while var == 1 : # 該條件永遠為true,循環(huán)將無限執(zhí)行下去
num = raw_input("Enter a number :")
print "You entered: ", num
print "Good bye!"
range,len
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print '當前水果 :', fruits[index]
print "Good bye!"
python數學函數:
abs,cell,cmp,exp,fabs,floor,log,log10,max,min,mod,pow,round,sqrt
randrange
訪問字符串的值
var1 = 'Hello World!'
var2 = "Python Runoob"
print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]
轉義字符
格式化輸出
print "My name is %s and weight is %d kg!" % ('Zara', 21)
字符串函數:
添加元素
list = [] ## 空列表
list.append('Google') ## 使用 append() 添加元素
list.append('Runoob')
print list
刪除元素
list1 = ['physics', 'chemistry', 1997, 2000]
print list1
del list1[2]
print "After deleting value at index 2 : "
print list1
列表操作
列表方法
刪除字典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # 刪除鍵是'Name'的條目
dict.clear(); # 清空詞典所有條目
del dict ; # 刪除詞典
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
字典的函數:
當前時間戳:
import time
time.time()
格式化日期輸出
import time
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
a = "Sat Mar 28 22:24:24 2016"
print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))
獲取某個月日歷:calendar
import calendar
cal = calendar.month(2016, 1)
print "以下輸出2016年1月份的日歷:"
print cal
當前日期和時間
import datetime
i = datetime.datetime.now()
print ("當前的日期和時間是 %s" % i)
print ("ISO格式的日期和時間是 %s" % i.isoformat() )
print ("當前的年份是 %s" %i.year)
print ("當前的月份是 %s" %i.month)
print ("當前的日期是 %s" %i.day)
print ("dd/mm/yyyy 格式是 %s/%s/%s" % (i.day, i.month, i.year) )
print ("當前小時是 %s" %i.hour)
print ("當前分鐘是 %s" %i.minute)
print ("當前秒是 %s" %i.second)
不定長參數:*
lambda:匿名函數
def....
python模塊搜索路徑
獲取用戶輸入
str = raw_input("請輸入:")
print "你輸入的內容是: ", str
input可以接收表達式
open參數
write要自己添加換行符
讀取10個字符
重命名:os.rename
os.remove
os.mkdir os.chdir
os.getcwd
os.rmdir
open參數
file的方法
異常:
try:
fh = open("testfile", "w")
fh.write("這是一個測試文件,用于測試異常!!")
except IOError:
print "Error: 沒有找到文件或讀取文件失敗"
else:
print "內容寫入文件成功"
fh.close()
try:
fh = open("testfile", "w")
fh.write("這是一個測試文件,用于測試異常!!")
finally:
print "Error: 沒有找到文件或讀取文件失敗"
用戶自定義異常:
os 模塊提供了非常豐富的方法用來處理文件和目錄。常用的方法如下表所示:
| 序號 | 方法及描述 |
| 1 |
os.access(path, mode)
檢驗權限模式 |
| 2 |
os.chdir(path)
改變當前工作目錄 |
| 3 |
os.chflags(path, flags)
設置路徑的標記為數字標記。 |
| 4 |
os.chmod(path, mode)
更改權限 |
| 5 |
os.chown(path, uid, gid)
更改文件所有者 |
| 6 |
os.chroot(path)
改變當前進程的根目錄 |
| 7 |
os.close(fd)
關閉文件描述符 fd |
| 8 |
os.closerange(fd_low, fd_high)
關閉所有文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯誤會忽略 |
| 9 |
os.dup(fd)
復制文件描述符 fd |
| 10 |
os.dup2(fd, fd2)
將一個文件描述符 fd 復制到另一個 fd2 |
| 11 |
os.fchdir(fd)
通過文件描述符改變當前工作目錄 |
| 12 |
os.fchmod(fd, mode)
改變一個文件的訪問權限,該文件由參數fd指定,參數mode是Unix下的文件訪問權限。 |
| 13 |
os.fchown(fd, uid, gid)
修改一個文件的所有權,這個函數修改一個文件的用戶ID和用戶組ID,該文件由文件描述符fd指定。 |
| 14 |
os.fdatasync(fd)
強制將文件寫入磁盤,該文件由文件描述符fd指定,但是不強制更新文件的狀態(tài)信息。 |
| 15 |
os.fdopen(fd[, mode[, bufsize]])
通過文件描述符 fd 創(chuàng)建一個文件對象,并返回這個文件對象 |
| 16 |
os.fpathconf(fd, name)
返回一個打開的文件的系統(tǒng)配置信息。name為檢索的系統(tǒng)配置的值,它也許是一個定義系統(tǒng)值的字符串,這些名字在很多標準中指定(POSIX.1, Unix 95, Unix 98, 和其它)。 |
| 17 |
os.fstat(fd)
返回文件描述符fd的狀態(tài),像stat()。 |
| 18 |
os.fstatvfs(fd)
返回包含文件描述符fd的文件的文件系統(tǒng)的信息,像 statvfs() |
| 19 |
os.fsync(fd)
強制將文件描述符為fd的文件寫入硬盤。 |
| 20 |
os.ftruncate(fd, length)
裁剪文件描述符fd對應的文件, 所以它最大不能超過文件大小。 |
| 21 |
os.getcwd()
返回當前工作目錄 |
| 22 |
os.getcwdu()
返回一個當前工作目錄的Unicode對象 |
| 23 |
os.isatty(fd)
如果文件描述符fd是打開的,同時與tty(-like)設備相連,則返回true, 否則False。 |
| 24 |
os.lchflags(path, flags)
設置路徑的標記為數字標記,類似 chflags(),但是沒有軟鏈接 |
| 25 |
os.lchmod(path, mode)
修改連接文件權限 |
| 26 |
os.lchown(path, uid, gid)
更改文件所有者,類似 chown,但是不追蹤鏈接。 |
| 27 |
os.link(src, dst)
創(chuàng)建硬鏈接,名為參數 dst,指向參數 src |
| 28 |
os.listdir(path)
返回path指定的文件夾包含的文件或文件夾的名字的列表。 |
| 29 |
os.lseek(fd, pos, how)
設置文件描述符 fd當前位置為pos, how方式修改: SEEK_SET 或者 0 設置從文件開始的計算的pos; SEEK_CUR或者 1 則從當前位置計算; os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效 |
| 30 |
os.lstat(path)
像stat(),但是沒有軟鏈接 |
| 31 |
os.major(device)
從原始的設備號中提取設備major號碼 (使用stat中的st_dev或者st_rdev field)。 |
| 32 |
os.makedev(major, minor)
以major和minor設備號組成一個原始設備號 |
| 33 |
os.makedirs(path[, mode])
遞歸文件夾創(chuàng)建函數。像mkdir(), 但創(chuàng)建的所有intermediate-level文件夾需要包含子文件夾。 |
| 34 |
os.minor(device)
從原始的設備號中提取設備minor號碼 (使用stat中的st_dev或者st_rdev field )。 |
| 35 |
os.mkdir(path[, mode])
以數字mode的mode創(chuàng)建一個名為path的文件夾.默認的 mode 是 0777 (八進制)。 |
| 36 |
os.mkfifo(path[, mode])
創(chuàng)建命名管道,mode 為數字,默認為 0666 (八進制) |
| 37 |
os.mknod(filename[, mode=0600, device])
創(chuàng)建一個名為filename文件系統(tǒng)節(jié)點(文件,設備特別文件或者命名pipe)。
|
| 38 |
os.open(file, flags[, mode])
打開一個文件,并且設置需要的打開選項,mode參數是可選的 |
| 39 |
os.openpty()
打開一個新的偽終端對。返回 pty 和 tty的文件描述符。 |
| 40 |
os.pathconf(path, name)
返回相關文件的系統(tǒng)配置信息。 |
| 41 |
os.pipe()
創(chuàng)建一個管道. 返回一對文件描述符(r, w) 分別為讀和寫 |
| 42 |
os.popen(command[, mode[, bufsize]])
從一個 command 打開一個管道 |
| 43 |
os.read(fd, n)
從文件描述符 fd 中讀取最多 n 個字節(jié),返回包含讀取字節(jié)的字符串,文件描述符 fd對應文件已達到結尾, 返回一個空字符串。 |
| 44 |
os.readlink(path)
返回軟鏈接所指向的文件 |
| 45 |
os.remove(path)
刪除路徑為path的文件。如果path 是一個文件夾,將拋出OSError; 查看下面的rmdir()刪除一個 directory。 |
| 46 |
os.removedirs(path)
遞歸刪除目錄。 |
| 47 |
os.rename(src, dst)
重命名文件或目錄,從 src 到 dst |
| 48 |
os.renames(old, new)
遞歸地對目錄進行更名,也可以對文件進行更名。 |
| 49 |
os.rmdir(path)
刪除path指定的空目錄,如果目錄非空,則拋出一個OSError異常。 |
| 50 |
os.stat(path)
獲取path指定的路徑的信息,功能等同于C API中的stat()系統(tǒng)調用。 |
| 51 |
os.stat_float_times([newvalue])
決定stat_result是否以float對象顯示時間戳
|
| 52 |
os.statvfs(path)
獲取指定路徑的文件系統(tǒng)統(tǒng)計信息 |
| 53 |
os.symlink(src, dst)
創(chuàng)建一個軟鏈接 |
| 54 |
os.tcgetpgrp(fd)
返回與終端fd(一個由os.open()返回的打開的文件描述符)關聯(lián)的進程組 |
| 55 |
os.tcsetpgrp(fd, pg)
設置與終端fd(一個由os.open()返回的打開的文件描述符)關聯(lián)的進程組為pg。 |
| 56 |
os.tempnam([dir[, prefix]])
返回唯一的路徑名用于創(chuàng)建臨時文件。 |
| 57 |
os.tmpfile()
返回一個打開的模式為(w+b)的文件對象 .這文件對象沒有文件夾入口,沒有文件描述符,將會自動刪除。 |
| 58 |
os.tmpnam()
為創(chuàng)建一個臨時文件返回一個唯一的路徑 |
| 59 |
os.ttyname(fd)
返回一個字符串,它表示與文件描述符fd 關聯(lián)的終端設備。如果fd 沒有與終端設備關聯(lián),則引發(fā)一個異常。 |
| 60 |
os.unlink(path)
刪除文件路徑 |
| 61 |
os.utime(path, times)
返回指定的path文件的訪問和修改的時間。 |
| 62 |
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
輸出在文件夾中的文件名通過在樹中游走,向上或者向下。 |
| 63 |
os.write(fd, str)
寫入字符串到文件描述符 fd中. 返回實際寫入的字符串長度 |
1.常用內置函數:(不用import就可以直接使用)
help(obj) 在線幫助, obj可是任何類型
callable(obj) 查看一個obj是不是可以像函數一樣調用
repr(obj) 得到obj的表示字符串,可以利用這個字符串eval重建該對象的一個拷貝
eval_r(str) 表示合法的python表達式,返回這個表達式
dir(obj) 查看obj的name space中可見的name
hasattr(obj,name) 查看一個obj的name space中是否有name
getattr(obj,name) 得到一個obj的name space中的一個name
setattr(obj,name,value) 為一個obj的name space中的一個name指向vale這個object
delattr(obj,name) 從obj的name space中刪除一個name
vars(obj) 返回一個object的name space。用dictionary表示
locals() 返回一個局部name space,用dictionary表示
globals() 返回一個全局name space,用dictionary表示
type(obj) 查看一個obj的類型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子類
類型轉換函數
chr(i) 把一個ASCII數值,變成字符
ord(i) 把一個字符或者unicode字符,變成ASCII數值
oct(x) 把整數x變成八進制表示的字符串
hex(x) 把整數x變成十六進制表示的字符串
str(obj) 得到obj的字符串描述
list(seq) 把一個sequence轉換成一個list
tuple(seq) 把一個sequence轉換成一個tuple
dict(),dict(list) 轉換成一個dictionary
int(x) 轉換成一個integer
long(x) 轉換成一個long interger
float(x) 轉換成一個浮點數
complex(x) 轉換成復數
max(...) 求最大值
min(...) 求最小值
用于執(zhí)行程序的內置函數
complie 如果一段代碼經常要使用,那么先編譯,再運行會更快。
2.和操作系統(tǒng)相關的調用
系統(tǒng)相關的信息模塊 import sys
sys.argv是一個list,包含所有的命令行參數.
sys.stdout sys.stdin sys.stderr 分別表示標準輸入輸出,錯誤輸出的文件對象.
sys.stdin.readline() 從標準輸入讀一行 sys.stdout.write("a") 屏幕輸出a
sys.exit(exit_code) 退出程序
sys.modules 是一個dictionary,表示系統(tǒng)中所有可用的module
sys.platform 得到運行的操作系統(tǒng)環(huán)境
sys.path 是一個list,指明所有查找module,package的路徑.
操作系統(tǒng)相關的調用和操作 import os
os.environ 一個dictionary 包含環(huán)境變量的映射關系 os.environ["HOME"] 可以得到環(huán)境變量HOME的值
os.chdir(dir) 改變當前目錄 os.chdir('d:\\outlook') 注意windows下用到轉義
os.getcwd() 得到當前目錄
os.getegid() 得到有效組id os.getgid() 得到組id
os.getuid() 得到用戶id os.geteuid() 得到有效用戶id
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgruops() 得到用戶組名稱列表
os.getlogin() 得到用戶登錄名稱
os.getenv 得到環(huán)境變量
os.putenv 設置環(huán)境變量
os.umask 設置umask
os.system(cmd) 利用系統(tǒng)調用,運行cmd命令
操作舉例:
os.mkdir('/tmp/xx') os.system("echo 'hello' /tmp/xx/a.txt") os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')
用python編寫一個簡單的shell
#!/usr/bin/python
import os, sys
cmd = sys.stdin.readline()
while cmd:
os.system(cmd)
cmd = sys.stdin.readline()
用os.path編寫平臺無關的程序
os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")
os.path.split(os.getcwd()) 用于分開一個目錄名稱中的目錄部分和文件名稱部分。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路徑名稱.
os.pardir 表示當前平臺下上一級目錄的字符 ..
os.path.getctime("/root/1.txt") 返回1.txt的ctime(創(chuàng)建時間)時間戳
os.path.exists(os.getcwd()) 判斷文件是否存在
os.path.expanduser('~/dir') 把~擴展成用戶根目錄
os.path.expandvars('$PATH') 擴展環(huán)境變量PATH
os.path.isfile(os.getcwd()) 判斷是否是文件名,1是0否
os.path.isdir('c:\Python26\temp') 判斷是否是目錄,1是0否
os.path.islink('/home/huaying/111.sql') 是否是符號連接 windows下不可用
os.path.ismout(os.getcwd()) 是否是文件系統(tǒng)安裝點 windows下不可用
os.path.samefile(os.getcwd(), '/home/huaying') 看看兩個文件名是不是指的是同一個文件
os.path.walk('/home/huaying', test_fun, "a.c")
遍歷/home/huaying下所有子目錄包括本目錄,對于每個目錄都會調用函數test_fun.
例:在某個目錄中,和他所有的子目錄中查找名稱是a.c的文件或目錄。
def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是訪問的目錄名稱
if filename in names: //names是一個list,包含dirname目錄下的所有內容
print os.path.join(dirname, filename)
os.path.walk('/home/huaying', test_fun, "a.c")
文件操作
打開文件
f = open("filename", "r") r只讀 w寫 rw讀寫 rb讀二進制 wb寫二進制 w+寫追加
讀寫文件
f.write("a") f.write(str) 寫一字符串 f.writeline() f.readlines() 與下read類同
f.read() 全讀出來 f.read(size) 表示從文件中讀取size個字符
f.readline() 讀一行,到文件結尾,返回空串. f.readlines() 讀取全部,返回一個list. list每個元素表示一行,包含"\n"\
f.tell() 返回當前文件讀取位置
f.seek(off, where) 定位文件讀寫位置. off表示偏移量,正數向文件尾移動,負數表示向開頭移動。
where為0表示從開始算起,1表示從當前位置算,2表示從結尾算.
f.flush() 刷新緩存
關閉文件
f.close()
regular expression 正則表達式 import re
簡單的regexp
p = re.compile("abc") if p.match("abc") : print "match"
上例中首先生成一個pattern(模式),如果和某個字符串匹配,就返回一個match object
除某些特殊字符metacharacter元字符,大多數字符都和自身匹配。
這些特殊字符是 。^ $ * + ? { [ ] \ | ( )
字符集合(用[]表示)
列出字符,如[abc]表示匹配a或b或c,大多數metacharacter在[]中只表示和本身匹配。例:
a = ".^$*+?{\\|()" 大多數metachar在[]中都和本身匹配,但"^[]\"不同
p = re.compile("["+a+"]")
for i in a:
if p.match(i):
print "[%s] is match" %i
else:
print "[%s] is not match" %i
在[]中包含[]本身,表示"["或者"]"匹配.用
和
表示.
^出現在[]的開頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒有出現在開頭,即于身身匹配。
-可表示范圍.[a-zA-Z]匹配任何一個英文字母。[0-9]匹配任何數字。
\在[]中的妙用。
\d [0-9]
\D [^0-9]
\s [ \t\n\r\f\v]
\S [^ \t\n\r\f\v]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\t 表示和tab匹配, 其他的都和字符串的表示法一致
\x20 表示和十六進制ascii 0x20匹配
有了\,可以在[]中表示任何字符。注:單獨的一個"."如果沒有出現[]中,表示出了換行\(zhòng)n以外的匹配任何字符,類似[^\n].
regexp的重復
{m,n}表示出現m個以上(含m個),n個以下(含n個). 如ab{1,3}c和abc,abbc,abbbc匹配,不會與ac,abbbc匹配。
m是下界,n是上界。m省略表下界是0,n省略,表上界無限大。
*表示{,} +表示{1,} ?表示{0,1}
最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一個?.
match object的end可以得到匹配的最后一個字符的位置。
re.compile("a*").match('aaaa').end() 4 最大匹配
re.compile("a*?").match('aaaa').end() 0 最小匹配
使用原始字符串
字符串表示方法中用\\表示字符\.大量使用影響可讀性。
解決方法:在字符串前面加一個r表示raw格式。
a = r"\a" print a 結果是\a
a = r"\"a" print a 結果是\"a
使用re模塊
先用re.compile得到一個RegexObject 表示一個regexp
后用pattern的match,search的方法,得到MatchObject
再用match object得到匹配的位置,匹配的字符串等信息
RegxObject常用函數:
re.compile("a").match("abab") 如果abab的開頭和re.compile("a")匹配,得到MatchObject
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").match("bbab")
None 注:從str的開頭開始匹配
re.compile("a").search("abab") 在abab中搜索第一個和re_obj匹配的部分
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").search("bbab")
_sre.SRE_Match object at 0x8184e18 和match()不同,不必從開頭匹配
re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.
返回一個tuple,其中元素是匹配的字符串.
MatchObject的常用函數
m.start() 返回起始位置,m.end()返回結束位置(不包含該位置的字符).
m.span() 返回一個tuple表示(m.start(), m.end())
m.pos(), m.endpos(), m.re(), m.string()
m.re().search(m.string(), m.pos(), m.endpos()) 會得到m本身
m.finditer()可以返回一個iterator,用來遍歷所有找到的MatchObject.
for m in re.compile("[ab]").finditer("tatbxaxb"):
print m.span()
高級regexp
| 表示聯(lián)合多個regexp. A B兩個regexp,A|B表示和A匹配或者跟B匹配.
^ 表示只匹配一行的開始行首,^只有在開頭才有此特殊意義。
$ 表示只匹配一行的結尾
\A 表示只匹配第一行字符串的開頭 ^匹配每一行的行首
\Z 表示只匹配行一行字符串的結尾 $匹配第一行的行尾
\b 只匹配詞的邊界 例:\binfo\b 只會匹配"info" 不會匹配information
\B 表示匹配非單詞邊界
示例如下:
print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示單詞邊界
_sre.SRE_Match object at 0x817aa98
print re.compile("\binfo\b").match("info ") #沒有使用raw \b表示退格符號
None
print re.compile("\binfo\b").match("\binfo\b ")
_sre.SRE_Match object at 0x8174948
分組(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b')
#!/usr/local/bin/python
import re
x = """
name: Charles
Address: BUPT
name: Ann
Address: BUPT
"""
#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)
p = re.compile(r"^name:(?P.*)\n^Address:(?P.*)\n", re.M)
for m in p.finditer(x):
print m.span()
print "here is your friends list"
print "%s, %s"%m.groups()
Compile Flag
用re.compile得到RegxObject時,可以有一些flag用來調整RegxObject的詳細特征.
DOTALL, S 讓.匹配任意字符,包括換行符\n
IGNORECASE, I 忽略大小寫
LOCALES, L 讓\w \W \b \B和當前的locale一致
MULTILINE, M 多行模式,只影響^和$(參見上例)
VERBOSE, X verbose模式
python中flag一般就是標記、標識的意思。
比如:
#!/usr/bin/pythonbr# -*- coding: UTF-8 -*-
brx = 7bri = 1brflag = 0br
brwhile i = 100:br
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):br
flag = 1br??? else:br
x = 7 * (i+1) # 根據題意,x一定是7的整數倍,所以每次乘以7
br??? i += 1brbrif flag == 1:br
print('階梯數是:', x)brelse:br
print('在程序限定的范圍內找不到答案!')br
輸出結果:
階梯數是: 119br
flag作為if的判斷條件,原值為0,當滿足while里的if語句,flag=1,即為找到x滿足if語句的條件,然后跳出循環(huán)。flag作為一個標識,如果找到了滿足條件的x,那么在下面的if-else語句中將輸出正確的x,否則表示沒找到。
擴展資料
Python正則表達式模塊re中很多函數都支持一個flag參數,用來對正則表達式進行補充說明,例如
findall(pattern, string, flags=0)
match(pattern, string, flags=0)
search(pattern, string, flags=0)
sub(pattern, repl, string, count=0, flags=0)
split(pattern, string, maxsplit=0, flags=0)
根據不同主機的不同ip地址,在靶機的C盤Flag文件夾中生成Flag.txt文件,為了防止Flag.txt文件被刪除,每隔三秒判斷一下Flag.txt文件是否存在,不存在就重新生成。