簡體   English   中英

Python正則表達式可以讀取.csv文件中的行

[英]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']

我已經測試了這一點,似乎我有正則表達式找到了,因為它正確識別'匹配'並返回它。

  1. 我的問題是,我如何獲得“匹配”行的剩余內容? (最終我會將其寫入一個新文件,但是現在我只想打印匹配的行)。

我已經將python詞典作為索引事物的一種方式進行了探索,但是我找到了一塊牆,並且正如我所說的那樣,正則表達式取得了積極的結果。

  1. 我想這可能是第二個問題:我選擇了錯誤的做法嗎?

我希望我已經足夠具體,第一個問題在這里,我花了幾個小時(而不是幾分鍾)尋找具體的解決方案,並嘗試了一些想法。 我猜這不是一個特別棘手的概念,但如果可能的話,我可以做一些提示。

處理這個的更好方法是使用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.

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