如何将单独列表的所有项目写入单个文件

How to write all the items of a separate lists to a single file

我已经从数据库中制作了两个列表。一个电子邮件列表和另一个密码列表。我正在尝试使用将列表写入文件。使用以下代码,但只有列表的最后一项被写入文件

from app import db
from app import Users


filtered_users = []
all_users = Users.query.all()
filtered_users = all_users.copy()
# print(filtered_users)
for user in filtered_users:
    `filtered_emails = []`
    `filtered_passwords = []`
    `filtered_emails.append(user.email)`
    `filtered_passwords.append(user.password)`
    `# print(filtered_emails, filtered_passwords)`

with open("users.txt", "w") as f:
    `for email in filtered_emails:`
        `for password in filtered_passwords:`
            `#print(email, password)`
            `print(email, password, file=f)`

你可以试试用'a'代替'w',因为'w'的方式会删除所有信息,从第一行开始写。

filtered_emails = ['xx@xx.com','yyy@yy.com','zzz@zz.com']
filtered_passwords = ['1','2','345']
with open("users.txt", "w") as f:
    for item in zip(filtered_emails,filtered_passwords):
        f.write(item[0]+' ')
        f.write(item[1]+'\n')

假设所有条目都是字符串。zip 返回一个 tuple 的用户名并且 passwords.you 可以使用 itertools.izip_longest 如果你想处理长度不等的列表

输出:

xx@xx.com 1
yyy@yy.com 2
zzz@zz.com 345

您的循环会在每次迭代时重置 filtered_emailsfiltered_passwords。你至少应该删除它。在编写时,您使用嵌套循环(每个电子邮件对应每个密码),同时电子邮件和密码应该绑定。

你应该这样做:

filtered_users = []
all_users = Users.query.all()
filtered_users = all_users.copy()
# print(filtered_users)
for user in filtered_users:
    filtered_emails.append(user.email)
    filtered_passwords.append(user.password)
    # print(filtered_emails, filtered_passwords)

with open("users.txt", "w") as f:
    for i, email in enumerate(filtered_emails):
        #print(email, password)
        print(email, filtered_passwords[i], file=f)

但是直接写入文件会更简单:

filtered_users = []
all_users = Users.query.all()
filtered_users = all_users.copy()
# print(filtered_users)
with open("users.txt", "w") as f:
    for user in filtered_users:
        print(user.email, user.password, file=f)