1. 程式人生 > 其它 >第十週內容回顧

第十週內容回顧

Python正則表示式

情況:在一個EXCEL檔案中,記錄了眾多公司的賬目,單位有萬元和億元,彼此混雜。現想把單位統一為萬元,且不顯示出來

法一:利用EXCEL的公式

= IF(VALUE(MID(B2,1,5)) < 1000, MID(B2,1,5)*10000, MID(B2, 1, 5))

​ 此法比較受資料特徵侷限。如上述公式,只能應對千萬到百億之間的金額而且要位數固定

法二:用正則表示式

當然,C++11的<regex>庫也可以,但是這麼一個小東西python足夠了

python正則表示式

  • re.search(pattern, string) -> Optional[Match[AnyStr]]
    查詢
  • re.findall(pattern, string) -> list[anystr] 查詢全部
  • re.sub(pattern, repl, string) -> the string 替換全部
  • re.split(pattern, string) -> list[anystr] 以pattern為界限分割

統統可加一個flags選項

可以對正則表示式進行分組:

  1. r"([a-z]+)([1-9]+)",括號分別編號為group(1), group(2)

  2. r"(?P<name1>[a-z]+)([1-9]+)",在編號的基礎上,用(?P<name1>)

    又給分組指定了名字name1

下面是一個例子

import re

def convert_yi(matched):
    yi = float(matched.group('yi'))
    return str(format(yi * 10000, '.0f'))

def convert_wan(matched):
    wan = float(matched.group('wan'))
    return str(format(wan, '.0f'))

infile = open("D:\\codes\\test\\abc.csv", "r", encoding='UTF-8')
outfile = open("D:\\codes\\test\\result.csv", "a", encoding='UTF-8')

for line in infile.readlines():
    temp = re.sub('(?P<yi>[-\.0-9]+)(億)', convert_yi, line)
    temp2 = re.sub('(?P<wan>[-\.0-9]+)(萬)', convert_wan, temp)
    outfile.write(temp2)

infile.close()
outfile.close()