繁体   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