Python正则表达式findall读取.csv文件中的行
我有一个.csv文件(或者可以是一个.txt文件),其中有一些记录: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
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工作了,因为它正确地识别了一个“匹配”并返回它
我猜这不是一个特别棘手的概念,但如果可能的话,我可以提供一些提示。如果您想读取.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']