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