Python将一个文件中的数据与另一个文件进行比较,并打印用冒号分隔的值



基本上我有两个文件,email.txtusers.txt。以下是它们的外观示例:

email.txt:

test3@gmail.com
test@gmail.com
test2@gmail.com

users.txt:

test@gmail.com:1030072275212435458
test2@gmail.com:731498530124070912
test3@gmail.com:846414846449654846

我需要遍历email.txt文件,并从users.txt中为每个文件打印相应的ID。在这种情况下,输出将是这样的:

846414846449654846
1030072275212435458
731498530124070912

这就是我目前所做的:

users = open("users.txt", 'r')
with open("email.txt", 'r') as f:
for email in f:
for i in users.readlines():
if i.startswith(email[:-1]):
ID = i.split(':')[1][:-1]
print(ID)

问题是,它只打印email.txt文件中的第一封电子邮件的ID,即846414846449654846,而忽略列表中的其余电子邮件。任何形式的帮助都将不胜感激。

问题是您只读取用户文件中的行一次。在每次迭代之后,您需要查找回文件的开头,以便可以再次读取行。

你可以在循环外打开用户文件:

with open("users.txt") as users:
with open("email.txt") as f:
for email in f:
users.seek(0)
for i in users:
if i.startswith(email[:-1]):
ID = i.split(':')[1][:-1]
print(ID)
break

尝试在字典中收集users.txt中的信息,并使用email.txt中的行作为键打印出字典的值。

with open("users.txt", "r") as users, open("email.txt", 'r') as f:
user_dict = dict([tuple(row.strip().split(":")) for row in users])
for email in f:
print(user_dict[email.strip()])

输出

846414846449654846
1030072275212435458
731498530124070912
users = open("users.txt", 'r').read().split('n')
emails= open("email.txt", 'r').read().split('n')
for e in emails:
for u  in users:
if u.split(':')[0]==e:
print(u.split(':')[1])
with open("users.txt", 'r') as file:
users = file.read().strip()
with open("email.txt", 'r') as file:
for email in file.readlines():
email=email.strip()
i=users.find(email)
if i == -1:
continue
i = i + len(email) + 1
j = users.find('n',i)
if j==-1:
Id=users[i:]
else:
Id=users[i:j]
print(Id)
user_map = {}
with open("users.txt") as f:
lines = f.readlines()
for line in lines:
_line = line.split(":")
key = _line[0]
value = _line[1]
user_map[key]= value
with open("email.txt") as f:
keys = f.readlines()
for key in keys:
print(user_map[key.strip()])

最好分两步完成。

在第一步中,从users.txt文件的行中存储的数据中创建一个以电子邮件为关键字、id为值的字典dct_users

with open("users.txt", 'r') as u: 
dct_users = {}
for email, id in [ line.split(':') for line in u if ':' in line]: 
dct_users[email.strip()] = id.strip()

然后在第二步中使用创建的字典打印具有给定电子邮件的用户的id:

with open("email.txt", 'r') as f:
for line in f:
email = line.strip()
if email:  
id = dct_users[email]
print(id)

上面的代码允许在";users.txt";以及";电子邮件.txt";文件。

您可能需要将文件读取为列表,并使用列表理解进行打印:

ID = [print(i.split(':')[1]) for f in open('email.txt').read().splitlines() 
for i in open('users.txt').read().splitlines() if f in i]
# 846414846449654846
# 1030072275212435458
# 731498530124070912

最新更新