【问题标题】:Python not reading from a text file correctly?Python 没有正确读取文本文件?
【发布时间】:2017-01-03 17:18:36
【问题描述】:

我有一个代码,其中我在列表中的文本文件中有电子邮件和密码,格式如下:["tom@gmail.com","Password1"],["harry@gmail.com","Password2]

我的代码从文本文件中读取,并将其与用户输入进行比较,以查看它是否存在于文本文件中。出于某种原因,当我输入第一封电子邮件"tom@gmail.com" 时,它会从文本文件中读取,但不是"Password1",但是它会正确读取"harry@gmail.com""Password2"。我找不到任何方法来解决这个问题并解决这个问题?没有收到错误,所以我不确定它哪里出错了。这是我的代码:

def Login():
    with open("logindata.txt","r") as file:
        for line in file:
            line=line.split(",")
            logindata.append([line[0],line[1].rstrip()])
        print(logindata)
    found=False
    while found == False:
        email=input("Enter email:")
        password=input("Enter password:")
        with open("logindata.txt","r")as file:
            for line in file:
                line = line.split(",")
                if email in line:
                    print("Correct email")
                if password in line:
                    print("Correct Password")
                    found=True
if __name__ == "__main__":
Login()

如果代码运行并且您尝试了我在开始时提供的输入,那么只有第二个电子邮件和密码组合有效。这是文本文件的样子text file format

追加:

username=input("Enter a new email")
        password=input("Enter a password")
        with open('logindata.txt','a')as file:
            line='\n'+ username + ',' + password
            file.write(line)
        print("user added")

【问题讨论】:

  • 您忘记删除换行符; password 不在行,password\n 在行。
  • @MartijnPieters 很抱歉回到这个问题,但如果我想在文本文件中附加一封新电子邮件,我需要将 \n 放在密码的末尾以将其放到下一行那么我该如何实现呢?
  • 最佳方式:使用csv.writer() 写入文件。每次您使用 writerow() 方法时,它都会为您添加换行符。否则,写入时手动添加;以fileobj.write('{},{}\n'.format(userid, password)) 为例。
  • @MartijnPieters 我有点想远离 csv 和写作,我对它们不太熟悉。我试过这个应该肯定可以工作,因为它只是在用户名之前添加一行,但它最终将数据放在下面的两行而不是直接

标签: python list python-3.x text-files


【解决方案1】:

您正在阅读带有行分隔符的文本。你的线条看起来不是这样的:

tom@gmail.com,Password1

它们实际上是这样的:

tom@gmail.com,Password1\n

当用逗号分割时,你会得到:

line = ['tom@gmail.com', 'Password1\n']

并且测试'Password1' in line 失败,但'Password1\n' in line 会成功。

\n 是换行符。您需要先删除它;您可以使用str.strip() 轻松删除开头和结尾的 all 空格:

for line in file:
    line = line.strip().split(",")
    if email in line:
        print("Correct email")
    if password in line:
        print("Correct Password")

您可以使用csv module来读取您的文件,而不是手动拆分:

import csv

with open("logindata.txt", "r") as file:
    reader = csv.reader(file)
    for user, pw in reader:
        if email == user:
            print("Correct email")
        if password == pw:
            print("Correct Password")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2013-02-28
    • 2016-08-04
    • 2016-02-26
    相关资源
    最近更新 更多