Python 正则表达式 findall 读取 .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 打开并读取文件,然后使用正则表达式 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']
我已经对此进行了测试,似乎正则表达式 findall 可以正常工作,因为它可以正确识别 'match' 并返回它。
- 我的问题是,如何让 'matched' 行的剩余内容也被返回? (最终我会把它写入一个新文件,但现在我只想打印匹配的行)。
我已经探索 python 字典作为索引事物的一种方式,但我碰壁了,除了正则表达式返回一个积极的结果之外没有进一步的进展。
- 我猜第二个问题可能是:我是否完全选择了错误的方法?
我希望我已经足够具体了,第一个问题在这里,我花了几个小时(而不是几分钟)寻找具体的解决方案,并尝试了一些想法。
我猜这不是一个特别棘手的概念,但如果可能的话我可以提供一些提示。
如果您想读取 .csv 文件中的所有值并将它们保存在键为 JB74XYZ
的字典中以及与此相关的详细信息。然后您可以逐行读取此文件,只需使用 split(" ")
即可获取列表。然后,您只需从列表中删除第一个元素并将其设为键并将剩余列表保存为字典的值,即可轻松创建字典。
如果你想使用正则表达式,你应该参考这个link:
https://docs.python.org/3/library/re.html 用于从您的文件中提取详细信息并将其保存在元组中。
您可以尝试 re.search
或者如果您需要它在开头,re.match
。 return 和 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 module,以制表符作为分隔符读入文件,然后逐行比较。如果该行中有匹配项,则将其附加到结果列表中。
处理此问题的更好方法是使用 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']
因此,在查看了所有出色的回复之后,我最终集中精力(正如这里的一些人所建议的那样)更详细地查看 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']
我有一个 .csv 文件(或者可以是一个 .txt 文件),里面有一些记录:
JB74XYZ Kerry Katona 44 Mansion_House LV10YFB
WL67IAM William Iam 34 The_Voice_Street LN44HJU
等等等等
我使用 python 打开并读取文件,然后使用正则表达式 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']
我已经对此进行了测试,似乎正则表达式 findall 可以正常工作,因为它可以正确识别 'match' 并返回它。
- 我的问题是,如何让 'matched' 行的剩余内容也被返回? (最终我会把它写入一个新文件,但现在我只想打印匹配的行)。
我已经探索 python 字典作为索引事物的一种方式,但我碰壁了,除了正则表达式返回一个积极的结果之外没有进一步的进展。
- 我猜第二个问题可能是:我是否完全选择了错误的方法?
我希望我已经足够具体了,第一个问题在这里,我花了几个小时(而不是几分钟)寻找具体的解决方案,并尝试了一些想法。 我猜这不是一个特别棘手的概念,但如果可能的话我可以提供一些提示。
如果您想读取 .csv 文件中的所有值并将它们保存在键为 JB74XYZ
的字典中以及与此相关的详细信息。然后您可以逐行读取此文件,只需使用 split(" ")
即可获取列表。然后,您只需从列表中删除第一个元素并将其设为键并将剩余列表保存为字典的值,即可轻松创建字典。
如果你想使用正则表达式,你应该参考这个link:
https://docs.python.org/3/library/re.html 用于从您的文件中提取详细信息并将其保存在元组中。
您可以尝试 re.search
或者如果您需要它在开头,re.match
。 return 和 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 module,以制表符作为分隔符读入文件,然后逐行比较。如果该行中有匹配项,则将其附加到结果列表中。
处理此问题的更好方法是使用 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']
因此,在查看了所有出色的回复之后,我最终集中精力(正如这里的一些人所建议的那样)更详细地查看 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']