如何在 while 循环中打开和编辑 txt 文件?

How to open and edit a txt file in a while loop?

首先,我是 python 的新手,我上的这所大学 class 对我帮助很大,所以提前道歉。

我有一个包含书名的文本文档。我需要让用户输入一个选项。每个选项都伴随着显示文本文档、编辑文本文档或只是停止程序。我有最后一个 一。我可以循环显示它。但是,如果我尝试在循环中执行它,它不会执行任何操作,没有错误,什么也没有。

f = open("Books.txt")
for line in f:
    print (line)

inp = ()
while inp != 3:
    print("1 - Display, 2 - Add, 3 - Exit")
    inp = input("Please select an option.")
    inp = int(inp)
if inp == 1:
    print (f)
f = open("Books.txt", "r+")
inp = 0

while inp != 3:
    print("1 - Display, 2 - Add, 3 - Exit")
    inp = input("Please select an option.")
    inp = int(inp)
    if inp == 1:
        for line in f:
            print (line)
    elif inp == 2:
        book = input("What is your book name? ")
        f.writelines(["\n"+book])
   
f.close()
exit()

您可以通过对文件对象 (f) 使用 tell()seek() 方法来做到这一点

这是它的代码

f = open("Books.txt", "a+")
inp = 0

while inp != 3:
    print("1 - Display, 2 - Add, 3 - Exit")
    inp = input("Please select an option.")
    inp = int(inp)
    if inp == 1:
        if f.tell() != 0:
            f.seek(0)
        for line in f:
            if line.strip():
                print (line.strip())
    elif inp == 2:
        book = input("What is your book name? ")
        f.writelines(["\n"+book])
   
f.close()

输出结果如下

1 - Display, 2 - Add, 3 - Exit
Please select an option.1
HELLO
WORLD
TEST
1 - Display, 2 - Add, 3 - Exit
Please select an option.2
What is your book name? Test2
1 - Display, 2 - Add, 3 - Exit
Please select an option.1
HELLO
WORLD
TEST
Test2
1 - Display, 2 - Add, 3 - Exit
Please select an option.3

代码解释如下

  1. 以可读访问权限的附加模式打开文件(https://docs.python.org/3/library/functions.html#open)

  2. 在这种情况下,文件光标将位于 EOF(文件末尾),因此您可以轻松地将新文本附加到文件中

  3. 当输入为1时,我们首先使用tell() which returns the integer value of the number of bytes read and if it's not in the starting. We move the cursor at starting of the file using seek(0) (https://docs.python.org/3/tutorial/inputoutput.html)

    检查光标位置
  4. 因为可能有只包含换行符的空行,我们可以在打印时过滤掉这些空行,然后通过使用 strip() 方法再次剥离白色字符来打印文本字符串,因为打印函数会自动添加换行符

  5. 要写行我们需要传递一个新字符(当然是行分隔符)然后输入书名