簡體   English   中英

使用 Python 從文件中提取 ssn 號、日期、電子郵件地址

[英]Extraction of ssn no., date, e-mail address from a file using Python

1.我有一個名為rexp.txt的文件,內容如下:

adf fdsf hh  h fg h 1995-11-23
dasvsbh 2000-04-12 gnym,mnbv 2001-02-17
dascvfbsn
bjhmndgfh
xgfdjnfhm244-44-2255  fgfdsg gfjhkh
fsgfdh 455-44-6577 dkjgjfkld
sgf
dgfdhj 
sdg 192.6.8.02 fdhdlk dfnfghr
fisdhfih dfhghihg 154.56.2.6 fdhusdgv
aff fjhgdf 
fdfdnfjgkpg
 fdf hgj  fdnbk gjdhgj 

dfdfg raeh95@gmail.com efhidhg  fdfuga reg@gmail.com
ergudfi rey@gmail.com iugftudfh dgufidjfdg
teeeee@gmail.comugfuhlfhs fgufif p

2.我想逐行提取ssn號碼,日期,電子郵件。 我期待循環遍歷每一行並返回預期字符串的代碼。

3.更正Python中的編碼

import re
def cfor_date(str):
    t=re.search(r'(\d{4}-\d{2}-\d{2})',str)
    return t

def cfor_ssn(str):
    f=re.search(r'(\d{3}-\d{2}-\d{4})',str)
    return f

def cfor_gm(str):
    g=re.search(r'([\w\.-]+@gmail[\w{3}\.-]+)',str)
    return g

f = open("rexp.txt","r").read()
lines = f.splitlines()
for line in iter(lines):
    x=line.split(" ")
    print x
    if (cfor_date(x)) != None: # i feel problem here
        r=cfor_ssn(x)
        print r
  • 您正在打開文件,完全讀取它,然后使用splitlines()將讀取的內容拆分到列表中,然后迭代該列表。 過程太長太復雜。 此外,文件在讀取后不會關閉。
  • 相反,為什么不使用with構造打開文件,然后使用readlines()完全讀取文件。 無需拆分行,無需擔心關閉文件。
  • 在您的代碼中,一旦您開始逐行迭代,您將再次基於單個空格拆分行,然后將 split 的輸出傳遞給您的函數以提取日期/電子郵件/ssn。 這就是問題所在。
  • 無需根據空格分割線。 將該行直接傳遞給函數以提取數據。
  • 你的正則表達式很好。 我沒有修改它。
  • 我已經用findall函數替換了search函數。 下面的例子解釋了兩者之間的區別。
 >>> import re >>> a = "Dinesh 123" >>> t = re.search(r"\\d+",a) >>> t <_sre.SRE_Match object at 0x01FE3918> >>> t.group() >>> '123' >>> x = re.findall(r'\\d+',a) >>> x >>> ['123']

如需更多幫助,請查看此鏈接!!!

以上所有點都存在於以下代碼中:

代碼:

import re
def cfor_date(tmp_line):
    t=re.findall(r'(\d{4}-\d{2}-\d{2})',tmp_line)
    return t

def cfor_ssn(tmp_line):
    f=re.findall(r'(\d{3}-\d{2}-\d{4})',tmp_line)
    return f

def cfor_gm(tmp_line):
    g=re.findall(r'([\w\.-]+@gmail[\w{3}\.-]+)',tmp_line)
    return g

with open("xyz.txt","r") as fh:
    for line in fh.readlines():
        date_list = cfor_date(line)
        ssn_list = cfor_ssn(line)
        gm_list = cfor_gm(line)

        if len(ssn_list) != 0:
            print ssn_list
        if len(date_list) != 0:
            print date_list
        if len(gm_list) != 0 :
            print gm_list

輸出 :

C:\Users\dinesh_pundkar\Desktop>python c.py
['1995-11-23']
['2000-04-12', '2001-02-17']
['244-44-2255']
['455-44-6577']
['raeh95@gmail.com', 'reg@gmail.com']
['rey@gmail.com']
['teeeee@gmail.comugfuhlfhs']

C:\Users\dinesh_pundkar\Desktop>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM