Python正则表达式findall读取.csv文件中的行

Python正则表达式findall读取.csv文件中的行,python,regex,csv,findall,Python,Regex,Csv,Findall,我有一个.csv文件(或者可以是一个.txt文件),其中有一些记录: JB74XYZ Kerry Katona 44 Mansion_House LV10YFB WL67IAM William Iam 34 The_Voice_Street LN44HJU 等等 我使用python打开并读取文件,然后使用regex findall(并尝试使用类似的regex规则)来识别匹配项: import re from re import findall reg = "JB74XYZ

我有一个.csv文件(或者可以是一个.txt文件),其中有一些记录:

JB74XYZ Kerry   Katona  44  Mansion_House   LV10YFB
WL67IAM William Iam 34  The_Voice_Street    LN44HJU
等等

我使用python打开并读取文件,然后使用regex findall(并尝试使用类似的regex规则)来识别匹配项:

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']
我已经对此进行了测试,似乎我已经让regex findall工作了,因为它正确地识别了一个“匹配”并返回它

  • 我的问题是,如何让“匹配”行的剩余内容也返回?(最终我会将其写入一个新文件,但现在我只想打印匹配的行)
  • 我已经探索了python字典作为索引事物的一种方法,但是我遇到了一个难题,除了正则表达式返回了一个积极的结果之外,我没有得到更多的东西

  • 我想第二个问题可能是:我是否选择了完全错误的方法
  • 我希望我已经足够具体了,这里的第一个问题,我已经花了几个小时(不是几分钟)寻找具体的解决方案,并尝试了一些想法。
    我猜这不是一个特别棘手的概念,但如果可能的话,我可以提供一些提示。

    如果您想读取.csv文件中的所有值并将它们保存在一个字典中,其中的键为
    JB74XYZ
    ,以及与此相关的详细信息。然后,您可以逐行读取此文件,只需使用
    split(“”
    获取列表。然后,只需从列表中删除第一个元素并将其设置为键,然后将剩余的列表保存为字典的值,就可以轻松地创建字典。 如果要使用正则表达式,请参考以下链接:
    用于从文件中提取详细信息并将其保存在元组中。

    您可以尝试
    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
    我要跟踪匹配内容的位置。

    我会使用,以标签作为分隔符读入文件,然后逐行比较。如果该行中有匹配项,请将其附加到结果列表中

    更好的处理方法是使用Python的模块。从您的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)
    
    然后从匹配的行中输出以下内容:

    ['JB74XYZ', 'Kerry', 'Katona', '44', 'Mansion_House', 'LV10YFB']
    

    所以,在看了所有优秀的回复之后,我最终集中精力(正如这里的一些人所建议的)更详细地查看csv模块。经过一番挖掘,我最终得出了这样的结论(在这个阶段,我不确定我到底是如何做到的……):

    这就产生了一个输出,我想我可以写入另一个文件:

    ['TS74UIO', 'Kerry', 'Katona', '44', 'Mansion_House', 'LV10YFB']
    

    你的目标是什么?您想索引什么?我的目标是存储带有相关名称和地址的车牌详细信息。登记牌将在系统的另一部分识别,然后我希望将其他相关详细信息写入另一个文件。广义的想法是可以自动识别汽车,并生成车主详细信息。(虽然都是假设,但我不是窥探等。分隔符似乎是tab,而不是空格。这取决于输入的类型,我想@Suzana_KThank,谢谢大家。非常有用。非常感谢。第一次在这里,它太神奇了。@TomShaw既然你是新来的,我建议你阅读,因为不同的人给出了几个答案对于你的问题,我不能让它只返回我需要的匹配行,而是返回全部(搜索)或无(使用正则表达式中的匹配)。您有什么建议可以改进吗?我已经编辑了示例以逐行检查。但是在阅读了其他答案后,我同意最好使用“csv”模块读取数据,因为这样可以轻松解析数据。
    ['TS74UIO', 'Kerry', 'Katona', '44', 'Mansion_House', 'LV10YFB']