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

时间:2016-04-13 16:00:08

标签: python regex csv findall

我有一个.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. 我的问题是,我如何获得“匹配”行的剩余内容? (最终我会把它写入一个新文件,但是现在我只想打印匹配的行)。
  2. 我已经将python词典作为索引事物的一种方式进行了探索,但是我遇到了一个问题,并且正如我所说的那样,正则表达式取得了积极成果。

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

5 个答案:

答案 0 :(得分:2)

更好的方法是使用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输出以下内容:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果要读取.csv文件中的所有值,并将其保存在密钥为JB74XYZ的字典中,并将其保存在与此相关的详细信息中。然后,您可以逐行阅读此文件,只需使用split(" ")即可获取列表。然后,您可以通过从列表中删除第一个元素并使其成为键来轻松创建字典,并将剩余列表保存为字典的值。 如果你想使用常规表达,你应该参考这个链接: https://docs.python.org/3/library/re.html用于从文件中提取详细信息并将其保存在元组中。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

因此,在查看了所有优秀的回复后,我最终集中注意力(这里有一些建议)更详细地查看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']