gpt4 book ai didi

Python - 从文本文件中调用行来编译第二个文件的模式搜索

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:24 25 4
gpt4 key购买 nike

如果有人问和回答这个问题,请原谅我。如果是这样,请将其归因于我是编程新手,并且对正确搜索了解不够。

我需要读取包含一系列数百个短语的文件,例如姓名或电子邮件地址,每行一个,用作编译搜索词的一部分 - pattern = re.search(name) . “模式”变量将用于搜索另一个超过 500 万行的文件,以从相关行中识别和提取选定字段。

为变量读入的名称文件的文本格式为:

John\n
Bill\n
Harry@helpme.com\n
Sally\n

到目前为止,我有以下代码,它不会出错,但也不会处理和关闭。如果我使用略有不同的代码和 sys.argv[1] 手动传递名称,一切正常。粗体代码(应该是)是我遇到问题的区域 - 从“lines = open...”开始

import sys
import re
import csv
import os

searchdata = open("reallybigfile", "r")
Certfile = csv.writer(open('Certfile.csv', 'ab'), delimiter=',')

**lines = open("Filewithnames.txt", 'r')
while True:
for line in lines:
line.rstrip('\n')
lines.seek(0)
for nam in lines:
pat = re.compile(nam)**

for f in searchdata.readlines():
if pat.search(f):
fields = f.strip().split(',')
Certfile.writerow([nam, fields[3], fields[4]])
lines.close()

底部的代码(从“for f in searchdata.readlines():”开始)可以很好地定位、提取和写入字段。我一直无法找到一种方法来读取 Filewithnames.txt 文件并让它使用每一行。它要么像这段代码一样挂起,要么将文件的所有行读取到最后一行并只返回最后一行的数据,例如“莎莉”。

提前致谢。

最佳答案

while True 是一个死循环,我看是没有办法跳出来的。那肯定会导致程序永远持续运行,而不会抛出错误。

删除 while True 行并取消缩进该循环的代码,看看会发生什么。

编辑:

如评论所述,我已经解决了一些问题,但我会让您找出实现目标所需的精确正则表达式。

import sys
import re
import csv
import os

searchdata = open("c:\\dev\\in\\1.txt", "r")
# Certfile = csv.writer(open('c:\\dev\\Certfile.csv', 'ab'), delimiter=',') #moved to later to ensure the file will be closed

lines = open("c:\\dev\\in\\2.txt", 'r')
pats = [] # An array of patterns
for line in lines:
line.rstrip()
lines.seek(0)
# Add additional conditioning/escaping of input here.
for nam in lines:
pats.append(re.compile(nam))

with open('c:\\dev\\Certfile.csv', 'ab') as outfile: #This line opens the file
Certfile = csv.writer(outfile, delimiter=',') #This line interprets the output into CSV
for f in searchdata.readlines():
for pat in pats: #A loop for processing all of the patterns
if pat.search(f) is not None:
fields = f.strip().split(',')
Certfile.writerow([pat.pattern, fields[3], fields[4]])
lines.close()
searchdata.close()

首先,确保关闭所有文件,包括您的输出文件。如前所述,while True 循环导致您无限运行。您需要一个正则表达式或一组正则表达式来涵盖所有可能的“名称”。执行一组正则表达式的代码更简单,所以这就是我在这里所做的。这可能不是最有效的。这包括一个用于处理所有模式的循环。

我相信您需要对输入文件进行额外的解析,以便为您提供干净的正则表达式。我留了一些空间供您执行此操作。

希望对您有所帮助!

关于Python - 从文本文件中调用行来编译第二个文件的模式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com