[英]Python regex findall to read line in .csv file
我有一個.csv文件(或者很可能是一個.txt文件),里面有一些記錄:
JB74XYZ Kerry Katona 44 Mansion_House LV10YFB
WL67IAM William Iam 34 The_Voice_Street LN44HJU
等等
我使用python打開並讀取文件,然后regex findall(並嘗試使用類似的正則規則)來識別匹配:
import re
from re import findall
reg = "JB74XYZ"
with open("RegDD.txt","r")as file:
data=file.read()
search=findall(reg,data)
print (search)
得出結果輸出:
['JB74XYZ']
我已經測試了這一點,似乎我有正則表達式找到了,因為它正確識別'匹配'並返回它。
我已經將python詞典作為索引事物的一種方式進行了探索,但是我找到了一塊牆,並且正如我所說的那樣,正則表達式取得了積極的結果。
我希望我已經足夠具體,第一個問題在這里,我花了幾個小時(而不是幾分鍾)尋找具體的解決方案,並嘗試了一些想法。 我猜這不是一個特別棘手的概念,但如果可能的話,我可以做一些提示。
處理這個的更好方法是使用Python的csv模塊。 從你的CSV的外觀來看,我猜它是用制表符分隔的,所以我就沒有這個假設了。
import csv
match = "JB74XYZ"
matched_row = None
with open("RegDD.txt", "r") as file:
# Read file as a CSV delimited by tabs.
reader = csv.reader(file, delimiter='\t')
for row in reader:
# Check the first (0-th) column.
if row[0] == match:
# Found the row we were looking for.
matched_row = row
break
print(matched_row)
然后應該從matched_row
輸出以下matched_row
:
['JB74XYZ', 'Kerry', 'Katona', '44', 'Mansion_House', 'LV10YFB']
我使用csv模塊 ,使用選項卡作為分隔符讀入文件,然后逐行比較。 如果該行中存在匹配項,請將其附加到結果列表中。
如果要讀取.csv文件中的所有值,並將其保存在字典中,密鑰為JB74XYZ
並且與此相關的詳細信息。 然后你可以逐行閱讀這個文件,只需使用split(" ")
來獲取列表。 然后,您可以通過從列表中刪除第一個元素並使其成為鍵來輕松創建字典,並將剩余列表保存為字典的值。 如果你想使用常規表達,你應該參考這個鏈接: https ://docs.python.org/3/library/re.html從你的文件中提取細節並將其保存在元組中。
您可以嘗試re.search
或者如果您需要它在開始時,請re.match
。 兩者都返回MatchObject
,其中包含有關操作的信息,包括對原始字符串的訪問。 例如,要獲取剩余的字符串:
進口重新
reg = "(JB74XYZ)"
with open("RegDD.txt","r")as file:
for line in file:
line = line.strip()
match = re.match(reg,line.strip())
if match:
print (line[match.end():])
請注意,我不得不正則表達式更改為一組,以告訴re
說我要追蹤的是我相匹配的位置。
因此,在查看了所有優秀的回復之后,我最終集中注意力(這里有一些建議)來更詳細地查看csv模塊。 隨着一些挖掘,我最終得到了這個(並且,在這個階段,我不確定我是怎么做到的......):
import csv
reg="TS74UIO"
reader = csv.reader(open('T3.csv'))
row=0
for row in reader:
if row[0] == reg:
print (row)
else:
row=+1
這導致輸出我認為我將能夠寫入另一個文件:
['TS74UIO', 'Kerry', 'Katona', '44', 'Mansion_House', 'LV10YFB']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.