使用循环从file2中搜索file1的名称并写入file3



我是Python的新手,有点把我的头发拔出来了。我花了几个小时尝试了好几件事,都没有成功。

我认为这是相当简单的,希望。我试图通过剥离被读取后的换行符从file2中的file1搜索名称。然后匹配。如果找到,我试着写整行从file2到file3。如果没有发现,则只将名称写入file3。

File1:

Abigail
Alexa
Jamie

File2:

Abigail,infoA,infoB,InfoC
John,infoA,infoB,InfoC
Jamie,infoA,infoB,InfoC

File3:

Abigail,infoA,infoB,InfoC
Alexa
Jamie,infoA,infoB,InfoC

Test Data file1:

安德森阿比盖尔

1月简

jancith鲍勃larry


博比沙龙雪莉


Test Data file2:

阿比盖尔,infoA、infoB infoC
安德森,infoA, infoB, infoC
1月,infoA, infoB, infoC
jancith, infoA, infoB, infoC
拉里,infoA, infoB, infoC
鲍勃,infoA, infoB, infoC
博比,infoA, infoB, infoC
沙龙,infoA, infoB, infoC

这个版本可以工作,但是只能读写第一个实例。

import re
f1 = open("file1.txt", "r")
f2 = open("file2.txt", "r")
f3 = open("file3.txt", "w")
for nameinfo in f1:
nameinfo = nameinfo.rstrip()
for listinfo in f2:
if re.search(nameinfo, listinfo):
f3.write(listinfo)
else
file3.write(nameinfo)

这个版本可以工作,但是它在匹配项之间循环时一遍又一遍地写名字(没有匹配项)。

import re
f1 = open("file1.txt", "r")
f2 = open("file2.txt", "r")
f3 = open("file3.txt", "w")
list2 = file2.readlines()
for nameinfo in file1:
nameinfo = gameInfo.rstrip()
for listinfo in list2:
if re.search(nameinfo, listinfo):
file3.write(listinfo)
else
file3.write(nameinfo)

是否有可能使用简单的基本循环命令来实现期望的结果?学习方面的帮助将不胜感激。我看到很多例子看起来非常复杂,或者很难理解。我刚开始学习,所以简单的基本方法是学习基础知识的最好方法。

第二个解决方案继续写入未找到的名称的原因是因为它搜索file2.txt的每一行寻找匹配并每次添加到file3.txt

你可以做的是引入一个新变量来存储你想要添加到file3.txt的值,然后在循环之外,当你实际将该值附加到你的文件中时。

下面是一个工作示例:

import re
# note the .read().split('n') this creates a list with each line as an item in the list
f1 = open("file1.txt", "r").read().split('n')
f2 = open("file2.txt", "r").read().split('n')
f3 = open("file3.txt", "w")
for name in f1:
# Edit: don't add aditional new line
if name == '':
continue
f3_text = name
for line in f2:
# if we find a match overwrite the name value in f3_text
# EDIT 2: don't match on partial names
# These are called fstrings if you haven't seen them before
# EDIT 3: using a regex allows us to use the ^ character which means start of line 
# That way ron doesn't match with Sharon
if re.search(rf"^{name},", line):
f3_text = line
# at this point f3_text is just the name if we never 
# found a match or the entire line if a match was found
f3.write(f3_text + 'n')

编辑:

添加新行的原因是,如果您查看f1,您将看到它实际上是4行

f1 = ['Abigail', 'Alexa', 'Jamie', '']

意味着外部for循环运行了4次,在最后一次迭代时,f3_text = ''导致附加了额外的新行。为了解决这个问题,我在for循环中添加了一个检查。

你也可以用纯Python编写,而不使用regex模块(如果你不想学习它的迷你语言):

with open("file1.txt", "r") as f:
names = f.readlines()
with open("file2.txt", "r") as f:
lines = f.readlines()
names = [name.strip() for name in names] #strip of all other unwanted characters
with open("file3.txt", "w") as f:
for name in names:
to_write = name + 'n'
for line in lines:
if name in line: #If we find a match rewrite 'to_write' variable adn Break the for loop
to_write = line
break
f.write(to_write)

相关内容

  • 没有找到相关文章

最新更新