【问题标题】:I am wondering why my search phonebook function is not working correctly我想知道为什么我的搜索电话簿功能无法正常工作
【发布时间】:2020-05-11 15:55:06
【问题描述】:

我目前有一个可用的电话簿,有 4 个选项。唯一的问题是,搜索选项不会打印所有匹配项。 如果我输入一个姓名并且电话簿中有匹配项,它将将该行打印到一个文本文件(phone.txt02,它是空白的)中。 然后在所有匹配项都打印到文本文件后,我的程序会读取新的文本文件并以我喜欢的格式返回它们。

对于新的文本文件,readFile 函数现在不能正常工作。 它在包含相同信息的 phone.txt (原始文本文件)上运行良好......名称和数字用逗号分隔。 因为这行得通,所以当值也是 name,number 时,我无法弄清楚为什么 readFile 函数对 phone02.txt 不起作用 \n

def readFile1(filename):
    phonebook = []
    file = open(filename, "r")

    for aline in file:
        person = aline.split(",")

        if person[1][-1] == '\n' :
            pn = person.pop(1)
            person.append(pn[:-1])
            phonebook.append(person)
        elif person[1][-1] != '\n' :
            phonebook.append(person)


    file.close()

    return phonebook


def printEntries1(phonebook):
    readFile1("phone02.txt")
    print("Name                   Phone Number")
    print("-------------------  --------------")
    for i in range (len(phonebook)):
        person = phonebook[i]
        print(i,"{:<20s} {:>14s}".format(person[0],person[1]))
    print("-------------------  --------------")

def searchEntry():
    search = input("Type a name to search for")

    with open("phone.txt", "r") as file:
        lines = file.readlines()

        for line in lines:

            if search in line:
                outfile = open("phone02.txt", "a")
                outfile.write(line)
        phonebook = readFile1("phone02.txt")
        print(readFile1("phone02.txt"))
        printEntries1(phonebook)
        outfile = open("phone02.txt", "r+")
        outfile.truncate()

print(searchEntry())

我不确定如何让 printEntries 打印来自 phone02.txt 的所有匹配项(姓名和号码)

这里是 phone.txt 文件的示例

Polly,549-5393
Bud Wieser,(213) 477-3928
Jack,277-4829
Mike Dunleavy,335-3453
Robert Darn,219-473-4373
Earl Lee,703-304-8393
Tim Bean,(612) 493-2629
Bud,(701) 487-8522 

如果我输入“Bud”,它会将包含 bud 的 2 行打印到 phone02.txt 但不能正确打印。

似乎(在本例中)将包含 Bud 的 2 行放入 phone02.txt 时,只有第一行在打印

Name.                Number
-------------------  ------------------
0 Bud Wieser.       (218) 477-3928

我知道这是很可能很容易解决的大量信息,但我认为它应该有助于解决问题。

感谢您的帮助。

【问题讨论】:

  • 谢谢,不知道该怎么做。
  • 你可以使用CSV模块吗?
  • 您的文件已经是 CSV 格式。这是文本文件的特例。
  • 有了它,您可以直接读入字典,然后使用它的功能。
  • searchEntry 函数的结尾是否意味着将 outfile 设置为空白文件?

标签: python


【解决方案1】:

您从未关闭过phone02.txt 的作者。只有在您关闭文件编写器或直接告诉 python 保存对文件的更改后,所有新行才会保存在文件中。请尝试

if search in line:
    outfile = open("phone02.txt", "a")
    outfile.write(line)
    outfile.close()

无论如何,您打开文件进行多次读取 - 请在循环之前执行一次并在之后关闭,或者为每次迭代打开和关闭编写器。

【讨论】:

  • ...哇。谢谢你。我已经搞砸了2天。另外,关于文件的打开,我会在循环之前打开它。我只是认为一旦第一个循环结束它就会关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多