python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

1、通用操做

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

一、Python len()

方法返回對象(字符、列表、元組等)長度或項目個數。php

語法

len()方法語法:html

len( q )

參數

  • q -- 對象。

返回值

返回對象長度。python

實例

如下實例展現了 len() 的使用方法:git

>>>str = "runoob"
>>> len(str)             # 字符串長度
6
>>> l = [1,2,3,4,5]
>>> len(l)               # 列表元素個數
5

二、python 成員運算符 in 和 not in

Python成員運算符測試給定值是否爲序列中的成員,例如字符串,列表或元組。 有兩個成員運算符,以下所述 -shell

in 若是在指定的序列中找到一個變量的值,則返回true,不然返回false。
not in 若是在指定序列中找不到變量的值,則返回true,不然返回false。api

in 若是在指定的序列中找到值返回 True,不然返回 False。 x 在 y 序列中 , 若是 x 在 y 序列中返回 True。
not in 若是在指定的序列中沒有找到值返回 True,不然返回 False。 x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。

如下實例演示了Python全部成員運算符的操做:

#!/usr/bin/python3

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 的值
a = 2
if ( a in list ):
   print ("3 - 變量 a 在給定的列表中 list 中")
else:
   print ("3 - 變量 a 不在給定的列表中 list 中")
以上實例輸出結果:
1 - 變量 a 不在給定的列表中 list 中
2 - 變量 b 不在給定的列表中 list 中
3 - 變量 a 在給定的列表中 list 中

三、Python身份運算符

身份運算符用於比較兩個對象的存儲單元數組

is is 是判斷兩個標識符是否是引用自一個對象 x is y, 相似 id(x) == id(y) , 若是引用的是同一個對象則返回 True,不然返回 False
is not is not 是判斷兩個標識符是否是引用自不一樣對象 x is not y , 相似 id(a) != id(b)。若是引用的不是同一個對象則返回結果 True,不然返回 False。

注: id() 函數用於獲取對象內存地址。bash

如下實例演示了Python全部身份運算符的操做:

#!/usr/bin/python3

a = 20
b = 20

if ( a is b ):
   print ("1 - a 和 b 有相同的標識")
else:
   print ("1 - a 和 b 沒有相同的標識")

if ( id(a) == id(b) ):
   print ("2 - a 和 b 有相同的標識")
else:
   print ("2 - a 和 b 沒有相同的標識")

# 修改變量 b 的值
b = 30
if ( a is b ):
   print ("3 - a 和 b 有相同的標識")
else:
   print ("3 - a 和 b 沒有相同的標識")

if ( a is not b ):
   print ("4 - a 和 b 沒有相同的標識")
else:
   print ("4 - a 和 b 有相同的標識")
以上實例輸出結果:
1 - a 和 b 有相同的標識
2 - a 和 b 有相同的標識
3 - a 和 b 沒有相同的標識
4 - a 和 b 沒有相同的標識
  • is 與 == 區別:app

  • is 用於判斷兩個變量引用對象是否爲同一個, == 用於判斷引用變量的值是否相等。tcp

  • >>>a = [1, 2, 3]
    >>> b = a
    >>> b is a 
    True
    >>> b == a
    True
    >>> b = a[:]
    >>> b is a
    False
    >>> b == a
    True

    四、Python運算符優先級

    如下表格列出了從最高到最低優先級的全部運算符:

    運算符 描述
    ** 指數 (最高優先級)
    ~ + - 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
    * / % // 乘,除,求餘數和取整除
    + - 加法減法
    >> << 右移,左移運算符
    & 位 'AND'
    ^ | 位運算符
    <= < > >= 比較運算符
    == != 等於運算符
    = %= /= //= -= += *= **= 賦值運算符
    is is not 身份運算符
    in not in 成員運算符
    not and or 邏輯運算符

如下實例演示了Python全部運算符優先級的操做:

#!/usr/bin/python3

a = 20
b = 10
c = 15
d = 5
e = 0

e = (a + b) * c / d       #( 30 * 15 ) / 5
print ("(a + b) * c / d 運算結果爲:",  e)

e = ((a + b) * c) / d     # (30 * 15 ) / 5
print ("((a + b) * c) / d 運算結果爲:",  e)

e = (a + b) * (c / d);    # (30) * (15/5)
print ("(a + b) * (c / d) 運算結果爲:",  e)

e = a + (b * c) / d;      #  20 + (150/5)
print ("a + (b * c) / d 運算結果爲:",  e)
以上實例輸出結果:
(a + b) * c / d 運算結果爲: 90.0
((a + b) * c) / d 運算結果爲: 90.0
(a + b) * (c / d) 運算結果爲: 90.0
a + (b * c) / d 運算結果爲: 50.0

and 擁有更高優先級:

x = True
y = False
z = False

if x or y and z:
    print("yes")
else:
    print("no")
以上實例輸出結果:
yes
  • 注意:Pyhton3 已不支持 <> 運算符,可使用 != 代替,若是你必定要使用這種比較運算符,可使用如下的方式:

  • >>> from __future__ import barry_as_FLUFL
    >>> 1 <> 2
    True

來自

2、與大小寫的相關方法

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

xgp = 'hello,wsd'
print(xgp)

# upper():將字符串轉換爲大寫
xgp1 = xgp.upper()
print(xgp1)

# isupper():判斷字符串是否都爲大寫
print(xgp1.isupper())

# lower():將字符串轉換爲小寫
xgp2 = xgp1.lower()
print(xgp2)

# islower():判斷字符串是否都爲小寫
print(xgp2.islower())

# title():將字符串中的單詞轉換爲標題格式,每一個單詞首字母大寫,其他小寫
xgp3 = xgp2.title()
print(xgp3)

# istitle():判斷字符事是否是一個標題
print(xgp3.istitle())

# swapcase():小寫轉大寫,大寫轉小寫
xgp4 = xgp3.swapcase()
print(xgp4)
xgp5 = xgp4.swapcase()
print(xgp5)

# capitalize():將首字母轉換爲大寫
xgp6 = xgp5.capitalize()
print(xgp6)
以上實例輸出結果:
# 原始輸出
hello,wsd
# 將字符串轉換爲大寫
HELLO,WSD
# 判斷字符串是否都爲大寫
True
# 將字符串轉換爲小寫
hello,wsd
# 判斷字符串是否都爲小寫
True
# 將字符串中的單詞轉換爲標題格式,每一個單詞首字母大寫,其他小寫
Hello,Wsd
# 判斷字符事是否是一個標題
True
# 小寫轉大寫,大寫轉小寫
hELLO,wSD
Hello,Wsd
# 將首字母轉換爲大寫
Hello,wsd

3、判斷類方法

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

一、Python3 isalpha()方法

Python isalpha() 方法檢測字符串是否只由字母組成。

語法

isalpha()方法語法:

str.isalpha()

參數

  • 無。

返回值

若是字符串至少有一個字符而且全部字符都是字母則返回 True,不然返回 False。

實例

str = "runoob";
print str.isalpha();

str = "runoob小鋼炮";
print str.isalpha();

str = "this is string example....wow!!!";
print str.isalpha();
以上實例輸出結果以下:
True
False
False

二、Python3 isalnum()方法

Python isalnum() 方法檢測字符串是否由字母和數字組成。

語法

isalnum()方法語法:

str.isalnum()

參數

  • 無。

返回值

若是 string 至少有一個字符而且全部字符都是字母或數字則返回 True,不然返回 False

實例

如下實例展現了isalnum()方法的實例:

str = "this2009";  # 字符中沒有空格
print str.isalnum();

str = "this is string example....wow!!!";
print str.isalnum();
以上實例輸出結果以下:
True
False

三、Python3 isspace()方法

Python isspace() 方法檢測字符串是否只由空白字符組成。

語法

isspace() 方法語法:

str.isspace()

參數

  • 無。

返回值

若是字符串中只包含空格/指標位/換行符,則返回 True,不然返回 False.

實例

如下實例展現了isspace()方法的實例:

str = "       \n \t" 
print (str.isspace())

str = "Runoob example....wow!!!"
print (str.isspace())
以上實例輸出結果以下:
True
False

四、Python3 isdecimal()方法

Python isdecimal() 方法檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。

注意:定義一個十進制字符串,只須要在字符串前添加 'u' 前綴便可。

語法

isdecimal()方法語法:

str.isdecimal()

參數

返回值

若是字符串是否只包含十進制字符返回True,不然返回False。

實例

如下實例展現了 isdecimal()函數的使用方法:

str = "runoob2016"
print (str.isdecimal())

str = "23443434"
print (str.isdecimal())
以上實例輸出結果以下:
False
True

五、Python3 isdigit()方法

Python isdigit() 方法檢測字符串是否只由數字組成。

語法

isdigit()方法語法:

str.isdigit()

參數

  • 無。

返回值

若是字符串只包含數字則返回 True 不然返回 False。

實例

如下實例展現了isdigit()方法的實例:

str = "123456"; 
print (str.isdigit())

str = "Runoob example....wow!!!"
print (str.isdigit())
以上實例輸出結果以下:
True
False

六、Python3 startswith()方法

startswith() 方法用於檢查字符串是不是以指定子字符串開頭,若是是則返回 True,不然返回 False。若是參數 beg 和 end 指定值,則在指定範圍內檢查。

語法

startswith()方法語法:

str.startswith(substr, beg=0,end=len(string));

參數

  • str -- 檢測的字符串。
  • substr -- 指定的子字符串。
  • strbeg -- 可選參數用於設置字符串檢測的起始位置。
  • strend -- 可選參數用於設置字符串檢測的結束位置。

返回值

若是檢測到字符串則返回True,不然返回False。

實例

如下實例展現了startswith()函數的使用方法:

str = "this is string example....wow!!!"
print (str.startswith( 'this' ))   # 字符串是否以 this 開頭
print (str.startswith( 'string', 8 ))  # 從第八個字符開始的字符串是否以 string 開頭
print (str.startswith( 'this', 2, 4 )) # 從第2個字符開始到第四個字符結束的字符串是否以 this 開頭
以上實例輸出結果以下:
True
True
False

七、Python3 endswith()方法

endswith() 方法用於判斷字符串是否以指定後綴結尾,若是以指定後綴結尾返回 True,不然返回 False。可選參數 "start" 與 "end" 爲檢索字符串的開始與結束位置。

語法

endswith()方法語法:

str.endswith(suffix[, start[, end]])

參數

  • suffix -- 該參數能夠是一個字符串或者是一個元素。
  • start -- 字符串中的開始位置。
  • end -- 字符中結束位置。

返回值

若是字符串含有指定的後綴返回 True,不然返回 False。

實例

如下實例展現了endswith()方法的實例:

Str='Runoob example....wow!!!'
suffix='!!'
print (Str.endswith(suffix))
print (Str.endswith(suffix,20))
suffix='run'
print (Str.endswith(suffix))
print (Str.endswith(suffix, 0, 19))
以上實例輸出結果以下:
True
True
False
False

4、小練習

模擬用戶註冊,要求:

一、用戶名不能是純數字,不能以數字開頭,必須包含數字、字母或者下劃線其中兩項。

二、用戶密碼長度在6-12位之間,不能是純數字或純字母,必須包含數字、字母大寫或小寫兩項。

三、符合以上要求,程序提示註冊成功;不然在輸入內容以後當即給出錯誤提示。

def user():
    while True:
        username = input('請輸入要註冊的帳號(不能是純數字,不能以數字開頭,必須包含數字、字母或者下劃線其中兩項')
        if username == '' :
            print('用戶名不能爲空')
            continue
        elif username .isdecimal() or username[0].isdecimal() == True:
            print('用戶名首字母不能爲數字或不能爲純數字用戶名' )
            continue
        elif username.isalpha() == True:
            print('必須包含數字字母下 劃線其中兩項' )
            continue
        else:
            return username
            break

def password():
    while True:
        passwd = input(' 請輸入密碼: ')
        if len(passwd) < 6 or len(passwd) > 12:
            print( '用戶密碼長度在6 -12位之間')
            continue
        elif passwd. isdecimal() or passwd. isalpha():
            print('用戶密碼不能是純數字或純字母,必須包含數字、字母大寫或小寫兩項:')
            continue
        else:
            return passwd
            break

def xgp():
    user()
    password()
    print('註冊成功')

xgp()
以上實例輸出結果以下:
請輸入要註冊的帳號(不能是純數字,不能以數字開頭,必須包含數字、字母或者下劃線其中兩項f123
 請輸入密碼: sdf456!weq.
註冊成功

5、查找類的方法

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

str = 'hello,python'
print(str.find('p'))
print(str.index('e'))
print(str.rindex('o'))
print(str.rfind('h'))
以上實例輸出結果以下:
6
1
10
9

一、Python3 find()方法

find() 方法檢測字符串中是否包含子字符串 str ,若是指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,若是指定範圍內若是包含指定索引值,返回的是索引值在字符串中的起始位置。若是不包含索引值,返回-1。

語法

find()方法語法:

str.find(str, beg=0, end=len(string))

參數

  • str -- 指定檢索的字符串
  • beg -- 開始索引,默認爲0。
  • end -- 結束索引,默認爲字符串的長度。

返回值

若是包含子字符串返回開始的索引值,不然返回-1。

實例

如下實例展現了find()方法的實例:

str1 = "Runoob example....wow!!!"
str2 = "exam";

print (str1.find(str2))
print (str1.find(str2, 5))
print (str1.find(str2, 10))
以上實例輸出結果以下:
7
7
-1

例子

>>>info = 'abca'
>>> print(info.find('a'))      # 從下標0開始,查找在字符串裏第一個出現的子串,返回結果:0
0
>>> print(info.find('a', 1))   # 從下標1開始,查找在字符串裏第一個出現的子串:返回結果3
3
>>> print(info.find('3'))      # 查找不到返回-1
-1

二、Python3 index()方法

index() 方法檢測字符串中是否包含子字符串 str ,若是指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,該方法與 python find()方法同樣,只不過若是str不在 string中會報一個異常。

語法

index()方法語法:

str.index(str, beg=0, end=len(string))

參數

  • str -- 指定檢索的字符串
  • beg -- 開始索引,默認爲0。
  • end -- 結束索引,默認爲字符串的長度。

返回值

若是包含子字符串返回開始的索引值,不然拋出異常。

實例

如下實例展現了index()方法的實例:

str1 = "Runoob example....wow!!!"
str2 = "exam";

print (str1.index(str2))
print (str1.index(str2, 5))
print (str1.index(str2, 10))
以上實例輸出結果以下(未發現的會出現異常信息):
7
7
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print (str1.index(str2, 10))
ValueError: substring not found

三、Python3 rfind()方法

Python rfind() 返回字符串最後一次出現的位置,若是沒有匹配項則返回-1。

語法

rfind()方法語法:

str.rfind(str, beg=0 end=len(string))

參數

  • str -- 查找的字符串
  • beg -- 開始查找的位置,默認爲0
  • end -- 結束查找位置,默認爲字符串的長度。

返回值

返回字符串最後一次出現的位置,若是沒有匹配項則返回-1。

實例

如下實例展現了rfind()函數的使用方法:

str1 = "this is really a string example....wow!!!"
str2 = "is"

print (str1.rfind(str2))

print (str1.rfind(str2, 0, 10))
print (str1.rfind(str2, 10, 0))

print (str1.find(str2))
print (str1.find(str2, 0, 10))
print (str1.find(str2, 10, 0))
以上實例輸出結果以下:
5
5
-1
2
2
-1

四、Python3 rindex()方法

rindex() 返回子字符串 str 在字符串中最後出現的位置,若是沒有匹配的字符串會報異常,你能夠指定可選參數[beg:end]設置查找的區間。

語法

rindex()方法語法:

str.rindex(str, beg=0 end=len(string))

參數

  • str -- 查找的字符串
  • beg -- 開始查找的位置,默認爲0
  • end -- 結束查找位置,默認爲字符串的長度。

返回值

返回子字符串 str 在字符串中最後出現的位置,若是沒有匹配的字符串會報異常。

實例

如下實例展現了rindex()函數的使用方法:

str1 = "this is really a string example....wow!!!"
str2 = "is"

print (str1.rindex(str2))
print (str1.rindex(str2,10))
以上實例輸出結果以下:
5
Traceback (most recent call last):
  File "test.py", line 6, in &lt;module&gt;
    print (str1.rindex(str2,10))
ValueError: substring not found

6、小練習

(1)練習

驗證規則:

正確格式:abc@163.com.cn

一、郵箱必須包含「@」和「.」

二、「@」在郵箱字符串中不能是第一個位置

三、「.」右側至少應該有2-3個字符

四、「.」左側不能是「@」

def vanzheng():
    youxiang = input(' 輸入您的郵箱:')
    num = youxiang.index('.')
    qiepian = youxiang[num:-1]
    if youxiang[0] =='@' or youxiang[0] == '.' :
        print('郵箱第一位不能是@或者「.」 ')
    elif '.' not in youxiang or '@' not in youxiang:
        print('郵箱必須包含「@」和「」')
    elif len(qiepian) <= 2:
        print('「.」右側至少應該有2-3個字符')
    elif youxiang[-1] == '@' or youxiang[-1] == '.':
        print('郵箱最後一位不能是@或者.')
    else:
        print('郵箱正確')
vanzheng()

yx=input('請輸入您的郵箱')
at = yx.find('@' )
dian = yx. find('.')
if (at <= 0 or dian <=0) or yx[-1]== '.' or (dian - at) <=1 :
    print('郵箱格式有誤' )
以上實例輸出結果以下:
輸入您的郵箱:123@qq.com
郵箱正確

(2)練習

一、提取passwd文件最後5個用戶的記錄

二、把每一個用戶的信息按「:」分別提取用戶名、所屬組、家目錄、登陸的shell類型

user_info = '''postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
test-07:x:1000:1000:test-07:/home/test-07:/bin/bash
chou:x:1003:1003::/home/chouchou:/bin/bash
test02:x:1002:1007::/home/test001:/bin/bash
try:x:1004:1004::/home/try:/bin/bash
laoyu:x:1005:1009::/home/laoyu:/bin/bash'''
new_info = user_info.split('\n')
for i in new_info:
    print('用戶名:'+i.split(':')[0]+'所屬組:'+i.split(':')[4]+'家目錄:'+i.split(':')[5]+'登陸環境:'+i.split(':')[6])
以上實例輸出結果以下:
用戶名:postfix所屬組:家目錄:/var/spool/postfix登陸環境:/sbin/nologin
用戶名:tcpdump所屬組:家目錄:/登陸環境:/sbin/nologin
用戶名:test-07所屬組:test-07家目錄:/home/test-07登陸環境:/bin/bash
用戶名:chou所屬組:家目錄:/home/chouchou登陸環境:/bin/bash
用戶名:test02所屬組:家目錄:/home/test001登陸環境:/bin/bash
用戶名:try所屬組:家目錄:/home/try登陸環境:/bin/bash
用戶名:laoyu所屬組:家目錄:/home/laoyu登陸環境:/bin/bash

7、其餘方法

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

一、Python3 split()方法

split() 經過指定分隔符對字符串進行切片,若是第二個參數 num 有指定值,則分割爲 num+1 個子字符串。

語法

split() 方法語法:

str.split(str="", num=string.count(str))

參數

  • str -- 分隔符,默認爲全部的空字符,包括空格、換行(\n)、製表符(\t)等。
  • num -- 分割次數。默認爲 -1, 即分隔全部。

返回值

返回分割後的字符串列表。

實例

如下實例展現了 split() 函數的使用方法:

str = "this is string example....wow!!!"
print (str.split( ))       # 以空格爲分隔符
print (str.split('i',1))   # 以 i 爲分隔符
print (str.split('w'))     # 以 w 爲分隔符

(1)如下實例以 # 號爲分隔符,指定第二個參數爲 1,返回兩個參數列表。

txt = "Google#Runoob#Taobao#Facebook"

# 第二個參數爲 1,返回兩個參數列表
x = txt.split("#", 1)

print(x)
以上實例輸出結果以下:
['Google', 'Runoob#Taobao#Facebook']

二、Python3 join()方法

Python join() 方法用於將序列中的元素以指定的字符鏈接生成一個新的字符串。

語法

join()方法語法:

str.join(sequence)

參數

  • sequence -- 要鏈接的元素序列。

返回值

返回經過指定字符鏈接序列中元素後生成的新字符串。

實例

如下實例展現了join()的使用方法:

s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
以上實例輸出結果以下:
r-u-n-o-o-b
runoob

三、Python3中 strip lstrip rstrip的使用方法

簡單來講,三種方法是爲了刪除字符串中不一樣位置的指定字符。其中,strip()用於去除字符串的首尾字符,同理,lstrip()用於去除左邊的字符,rstrip()用於去除右邊的字符

(1)strip()

Python strip() 方法用於移除字符串頭尾指定的字符(默認爲空格)。
若傳入的是一個字符數組,編譯器將去除字符串兩端全部相應的字符,直到沒有匹配的字符。

語法

str.strip([chars])

參數

  • chars – 移除字符串頭尾指定的字符。

實例

一、默認方法

string1 = '     Kobe Bryant     ' 
print(string1.strip())
以上實例輸出結果以下:
Kobe Bryant 
    默認刪除字符串先後的空格。

二、 參數傳遞

string2 = 'uuuussssaaaa china aaaassssuuu'
print(string2.strip('usa'))
以上實例輸出結果以下:
china
    其中, 'u'、's'、'a' 的個數能夠爲任意,不影響最後輸出 &gt; china

(2)lstrip()

Python lstrip() 方法用於截掉字符串左邊的空格或指定字符,默認爲空格。

實例

一、默認方法

string1 = '     Kobe Bryant     ' 
string1.lstrip()
以上實例輸出結果以下:
'Kobe Bryant     '
默認刪除字符串前的空格。

二、 參數傳遞

string2 = 'uuuussssaaaa china aaaassssuuu'
print(string2.strip('usa'))
以上實例輸出結果以下:
china aaaassssuuu

(3)rstrip()

Python lstrip() 方法用於截掉字符串右邊的空格或指定字符,默認爲空格。

實例

一、默認方法

string1 = '     Kobe Bryant     ' 
string1.lstrip()
以上實例輸出結果以下:
Kobe Bryant'
默認刪除字符串後的空格。

二、參數傳遞

string2 = 'uuuussssaaaa china aaaassssuuu'
print(string2.strip('usa'))
以上實例輸出結果以下:
uuuussssaaaa china

四、Python3 replace()方法

描述

replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),若是指定第三個參數max,則替換不超過 max 次。

語法

replace()方法語法:

str.replace(old, new[, max])

參數

  • old -- 將被替換的子字符串。
  • new -- 新字符串,用於替換old子字符串。
  • max -- 可選字符串, 替換不超過 max 次

返回值

返回字符串中的 old(舊字符串) 替換成 new(新字符串)後生成的新字符串,若是指定第三個參數max,則替換不超過 max 次。

實例

如下實例展現了replace()函數的使用方法:

str = "wsdixgp.top"
print ("xgp舊地址:", str)
print ("xgp新地址:", str.replace("wsdixgp.top", "wsdlxgp.top"))

str = "this is string example....wow!!!"
print (str.replace("is", "was", 3))
以上實例輸出結果以下:
xgp舊地址: wsdixgp.top
xgp新地址: wsdlxgp.top
thwas was string example....wow!!!

8、使用Python分析Apache的訪問日誌

一、字符串分割

建立access.log文件(存放日誌信息便可)

  • log = '182.19.31.129 - - [16/JAN/2020:06:05:35 +0200] "GET /index.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; PJBot/3.0; +http://craw1.pagesjaunes.fr/robot)" "-"'
  • log_temp = log.split()
  • print(log_temp)
  • print('用戶IP:'+log_temp[0])
  • print('訪問頁面:'+log_temp[6])
  • print('狀態碼:'+log_temp[8])
from __future__  import print_function

ips = []
with open('access.log') as f:
    for line in f:
        ips.append(line.split()[0])

print('網站請求數[PV]:'+ str(len(ips)))
print('網站獨立的訪客數[UV]:'+ str(len(set(ips))))
以上實例輸出結果以下:
網站請求數[PV]:120
網站獨立的訪客數[UV]:6

二、使用counter類統計PV和UV

from __future__  import print_function

d = {}
with open('access.log') as f:
    for line in f:
        key = line.split()[8]
        d.setdefault(key,0)
        d[key] += 1

print(d)

# 出錯的頁面數量
error_requests = 0
# 頁面總訪問量
sum_requests = 0
# 遍歷字典
for key, value in d.items():
    if int(key) >= 400:
        error_requests += value
    sum_requests += value

print('頁面出錯率:{0:2f}%'.format(error_requests * 100.0/sum_requests))
以上實例輸出結果以下:
{'200': 115, '500': 1, '248': 1, '210': 1, '203': 1, '400': 1}
頁面出錯率:1.666667%

9、格式化

python字符串(大小寫、判斷、查找、分割、拼接、裁剪、替換、格式化)

一、Python字符串格式化

Python 支持格式化字符串的輸出 。儘管這樣可能會用到很是複雜的表達式,但最基本的用法是將一個值插入到一個有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用與 C 中 sprintf 函數同樣的語法。

print ("我叫 %s 今年 %d 歲!" % ('小名', 10))
以上實例輸出結果:
我叫 小名 今年 10 歲!

python字符串格式化符號:

符 號 描述
%c 格式化字符及其ASCII碼
%s 格式化字符串
%d 格式化整數
%u 格式化無符號整型
%o 格式化無符號八進制數
%x 格式化無符號十六進制數
%X 格式化無符號十六進制數(大寫)
%f 格式化浮點數字,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 做用同%e,用科學計數法格式化浮點數
%g %f和%e的簡寫
%G %f 和 %E 的簡寫
%p 用十六進制數格式化變量的地址

格式化操做符輔助指令:

符號 功能
* 定義寬度或者小數點精度
- 用作左對齊
+ 在正數前面顯示加號( + )
<sp> 在正數前面顯示空格
# 在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'仍是'X')
0 顯示的數字前面填充'0'而不是默認的空格
% '%%'輸出一個單一的'%'
(var) 映射變量(字典參數)
m.n. m 是顯示的最小總寬度,n 是小數點後的位數(若是可用的話)

Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它加強了字符串格式化的功能。

練習

rint( '%d' % 3)
print( '%09f' % 3.14)
print('%s' % 'hello')
以上實例輸出結果以下:
3
03.140000
hello

二、format函數

Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它加強了字符串格式化的功能。

基本語法是經過 {} 和 : 來代替之前的 % 。

format 函數能夠接受不限個參數,位置能夠不按順序。

>>>"{} {}".format("hello", "world")    # 不設置指定位置,按默認順序
'hello world'

>>> "{0} {1}".format("hello", "world")  # 設置指定位置
'hello world'

>>> "{1} {0} {1}".format("hello", "world")  # 設置指定位置
'world hello world'

也能夠設置參數:

print("網站名:{name}, 地址 {url}".format(name="xgp", url="wsdlxgp.top"))

# 經過字典設置參數
site = {"name": "xgp", "url": "wsdlxgp.top"}
print("網站名:{name}, 地址 {url}".format(**site))

# 經過列表索引設置參數
my_list = ['xgp', 'wsdlxgp.top']
print("網站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必須的
以上實例輸出結果以下:
網站名:xgp, 地址 wsdlxgp.top
網站名:xgp, 地址 wsdlxgp.top
網站名:xgp, 地址 wsdlxgp.top

也能夠向 str.format() 傳入對象:

class AssignValue(object):
    def __init__(self, value):
        self.value = value
my_value = AssignValue(6)
print('value 爲: {0.value}'.format(my_value))  # "0" 是可選的
以上實例輸出結果以下:
value 爲: 6

三、數字格式化

下表展現了 str.format() 格式化數字的多種方法:

數字 格式 輸出 描述
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)
11 '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) 1011 11 13 b 0xb 0XB

^, <, > 分別是居中、左對齊、右對齊,後面帶寬度, : 號後面帶填充的字符,只能是一個字符,不指定則默認是用空格填充。

+ 表示在正數前顯示 +,負數前顯示 -; (空格)表示在正數前加空格

b、d、o、x 分別是二進制、十進制、八進制、十六進制。

# 精度
print('{: .2f}'.format(3.141592656535897))
# 符號
print('{: .2f}'.format(3.141592656535897))
# 寬度
print( '{:10.2f}'.format(3.141592656535897))
# 對齊方式
print('{:^10.2f}'.format(3.141592656535897))
# 逗號分隔
print('{:,}'.format(23421424231))
以上實例輸出結果以下:
3.14
 3.14
      3.14
   3.14   
23,421,424,231

此外咱們可使用大括號 {} 來轉義大括號,以下實例:

print ("{} 對應的位置是 {{0}}".format("runoob"))
以上實例輸出結果以下:
runoob 對應的位置是 {0}
相關文章
相關標籤/搜索