通配符、正則表達式、python去重


1.linux通配符

*:代表所有字符(0到多個);

?:代表一個字符;

;:連續不同命令之間的分隔符;

#:配置文件注釋;

|:管道;

~:當前用戶的家目錄;

-:上一次所在的路徑;

$:變量前面需要加的符號;

/:路徑分隔符;

>或1>:重定向,會覆蓋原有數據;

>>:追加重定向;

<:輸入重定向(xargs、tr);

<<:追加輸入重定向(cat);

':單引號,不具有命令置換功能,輸出時所見即所得;

":雙引號,具有變量置換功能,解析變量后才輸出.不加引號相當於雙引號;

`:反引號,兩個``中間為命令,會先執行,等價於$();

{}:命令區塊組合或內容序列,echo stu{1..5};cp a.txt {,.bak};

!:邏輯運算中的非(not);

&&:and並且,前一個命令執行成功時,才執行后一個命令;

||:or或,前一個命令執行失敗時,執行后一個命令;

.:當前目錄;

..:上一級目錄;

2.正則表達式:為處理大量字符串而定義的一套規則和方法

a.基礎正則第一波:

# 匹配以m開頭的字符,因為是貪婪模式,所以匹配到整行
grep "^m" oldboy.txt
# 匹配以m結尾的字符
grep "m$" oldboy.txt
# 匹配空行並顯示行號
grep -n "^$" oldboy.txt
# 排除空行
grep -vn "^$" oldboy.txt
# 只輸出匹配到的m字符
grep -no "m" oldboy.txt

.:代表且只能代表任意一個字符;

*:重復0個或多個前面的一個字符,例如:my*,0個y,會匹配有m字符的字符串;1個y,my;多個y,myyy;

\:轉義,讓有特殊意義的字符,只代表字符本身;

.*:匹配任意長度的任意字符.

b.基礎正則第二波:

grep -no [abc] oldboy.txt  匹配集合內的任意一個字符
grep -no [^abc] oldboy.txt  不匹配集合內的字符
a\{n,m\} 前一個字符,重復n到m次
a\{n,\}  重復至少n次
a\{n\}   重復n次
a\{,m\}  最多重復m次

# -w參數是按單詞搜索,只匹配有這個單詞的行
grep -w "oldboy" oldboy.txt  
# grep -E 不用再加轉義符\,egrep、sed -r是同樣的道理--支持擴展正則
# -i、-v為常用參數、-o(用於統計出現在文中的次數)

c.通配符和正則表達式比較:

通配符多用在文件上,比如find、ls、cp等;正則表達式多用於文本過濾,比如grep、awk、sed等;

*在通配符中表示匹配任意的0個或多個字符;在正則表達式中是重復之前的一個或者多個字符,不能獨立使用.

3.python去重的幾種方法:

>>> lst1 = [2, 1, 3, 4, 1]
>>> lst2 = list(set(lst1))
>>> print(lst2)
[1, 2, 3, 4]
二、常規方法
>>> lst1 = [2, 1, 3, 4, 1]
>>> temp = []
>>> for item in lst1:
		if not item in temp:
			temp.append(item)	
>>> print(temp)
[2, 1, 3, 4]
三、列表推導
>>> lst1 = [2, 1, 3, 4, 1]
>>> temp = []
>>> [temp.append(i) for i in lst1 if not i in temp]
[None, None, None, None]
>>> print(temp)
[2, 1, 3, 4]
>>> data = [2, 1, 3, 4, 1]
>>> [item for item in data if data.count(item) == 1]
[2, 3, 4]
四、sort、sorted
>>> lst1 = [2, 1, 3, 4, 1]
>>> lst2.sort(key=lst1.index)
>>> lst2 = sorted(set(lst1), key=lst1.index)
個人覺得第一種和第三種方法比較好理解

sort與sorted區別:

  sort 是應用在list上的方法,sorted 可以對所有可迭代的對象進行排序操作.list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作.

通過指定列表中的元素進行排序:
>>> random = [(2, 2), (3, 4), (4, 1), (1, 3)]
>>> random.sort(key=lambda s:s[1])
>>> print(random)
[(4, 1), (2, 2), (1, 3), (3, 4)]

sorted的使用方法:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
# 按年齡降序排序
>>> sorted(students, key=lambda s: s[2], reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM