[問題] 讀取檔案後使用正規表示法將字串列出
小妹為Python超新手,如果問了奇怪的問題,還請大家包涵。
最近在練習在pycharm讀取電腦中的檔案。
檔案內容如下:
Joe's email is joe@gmail.com
Tom's email is tom@gmail.com
檔名:email.txt
pycharm裡的檔案為:
import sys
import os
import re
fp= open("C:\\Users\\haha\\Desktop\\email.txt","r")
text =fp.readlines()
print(text)
for w in text:
sent= re.match(r'([\w.-]+@[\w.-])+',w)
print(sent)
fp.close()
預期會print出來的樣子如下:
joe@gmail.com
tom@gmail.com
但編譯執行後出現的樣子如下:
["Joe's email is joe@gmail.com\n", "Tom's email is tom@gmail.com"]
None
None
<_sre.SRE_Match object at 0x02174960>
想請問版上各位高手是哪個地方出錯了呢?
--
那個…我剛剛發現原因了…
因為正規表示法接受的格式為string,但我從上面的檔案讀的格式是清單(list)
這就是我無法編譯執行的原因…我把清單讀成字串就可以了。
程式如下:
import string
import sys
import os
import re
fp= open("C:\\Users\\haha\\Desktop\\email.txt","r")
text =fp.readlines()
text1=''.join(text)
print(text1)
sent = re.findall(r"[\w.-]+@[\w_.-]+", text1)
print(sent)
fp.close()
感謝各位高手的幫忙^^
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.24.145
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1502193837.A.3C2.html
推
08/08 20:31, , 1F
08/08 20:31, 1F
→
08/08 20:32, , 2F
08/08 20:32, 2F
→
08/08 20:32, , 3F
08/08 20:32, 3F
已按照樓上二位的建議將re.mach改成 re.search及re.findall但都遇到了同樣的錯誤...
錯誤如下(以findall為例)
["Joe's email is joe@gmail.com\n", "Tom's email is tom@gmail.com\n", 'scheule@gmail.com']
Traceback (most recent call last):
File "C:/Users/mlchen/PycharmProjects/untitled/Regular_expression.py", line 21, in <module>
sent = re.findall(r"[\w.-]+@[\w_.-]+", text)
File "C:\Python27\lib\re.py", line 181, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
Process finished with exit code 1
※ 編輯: schedule6666 (36.231.24.145), 08/08/2017 21:08:24
※ 編輯: schedule6666 (36.231.24.145), 08/08/2017 21:27:16
※ 編輯: schedule6666 (36.231.24.145), 08/08/2017 21:28:11
※ 編輯: schedule6666 (36.231.24.145), 08/08/2017 21:30:50
推
08/08 22:16, , 4F
08/08 22:16, 4F
→
08/08 22:28, , 5F
08/08 22:28, 5F
→
08/08 22:30, , 6F
08/08 22:30, 6F
※ 編輯: schedule6666 (36.231.24.145), 08/09/2017 03:08:19
→
08/09 10:19, , 7F
08/09 10:19, 7F
→
08/09 10:20, , 8F
08/09 10:20, 8F
→
08/09 10:22, , 9F
08/09 10:22, 9F
→
08/09 10:27, , 10F
08/09 10:27, 10F
→
08/09 10:28, , 11F
08/09 10:28, 11F
→
08/09 10:28, , 12F
08/09 10:28, 12F
Hello,Coeric,不好意思,因為剛寫Python所以有點不太懂…,
照你的說法,所以我在一開始讀檔案的時候,python是預設將txt檔裡面的東西讀成字串,
然後我要自已讀成list嗎?
第二個問題是,因為我只是練習要用正規表示法去抓e-mail,所以不太懂為什麼要讀
list呢? 才方便做後續動作是指要把資料存在MySQL嗎?
※ 編輯: schedule6666 (36.231.24.145), 08/09/2017 16:07:16
※ 編輯: schedule6666 (36.231.24.145), 08/09/2017 16:09:13
推
08/09 16:50, , 13F
08/09 16:50, 13F
→
08/09 16:51, , 14F
08/09 16:51, 14F
→
08/09 16:53, , 15F
08/09 16:53, 15F
→
08/09 23:11, , 16F
08/09 23:11, 16F
→
08/09 23:11, , 17F
08/09 23:11, 17F
→
08/09 23:12, , 18F
08/09 23:12, 18F