python小小白哟 发表于 2023-7-22 09:27:16

python中写入文件每条记录单独占用一行




怎么让输入的内容单独占用一行呢?

代码如下:
from pathlib import Path
while True:
    print("输入q退出")
    a = input("输入你的名字:")
    if a == "q":
      break

    path = Path("guest_book.txt")
    path.write_text(a)

每次都是覆盖文件,然后就只有一行的内容。

Mike_python小 发表于 2023-7-22 09:27:30

你好!要让每条记录单独占用一行,你需要在写入文件时添加换行符 \n。这样每次写入的内容就会另起一行。

以下是修改后的代码示例:


from pathlib import Path

while True:
    print("输入q退出")
    a = input("输入你的名字:")
    if a == "q":
      break
   
    path = Path("guest_book.txt")
    # 使用 'a' 模式打开文件,追加内容而不是覆盖
    with open(path, 'a') as file:
      # 写入内容时添加换行符
      file.write(a + '\n')


现在,每当用户输入一条记录时,都会在文件中另起一行进行保存。

希望能解决你的问题!如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-7-22 09:27:32

要做到每条记录单独占用一行,您需要在每个名字后面添加一个换行符( '\n' )。同时,您需要使用append模式('a')写入文件,以防止新内容覆盖旧内容。您需要使用 open() 函数以append模式打开文件,然后写入内容。 pathlib.Path.write_text() 是以覆盖模式写入内容的,所以它不能满足您的需求。

您可以将代码改写如下:

from pathlib import Path
while True:
    print("输入q退出")
    a = input("输入你的名字:")
    if a == 'q':
      break

    path = Path("guest_book.txt")
    with path.open('a', encoding='utf-8') as f:
      f.write(a + '\n')


在这段代码中, 'a' 表示append模式,这意味着当我们写入内容时,新的内容会被添加到文件的末尾,而不是覆盖原有的内容。 encoding='utf-8' 指定了文件的编码方式,这对于包含非ASCII字符的文本(例如中文)非常重要。 f.write(a + '\n') 将输入的名字和一个换行符一起写入文件,这样每个名字都会单独占用一行。

python小小白哟 发表于 2023-7-22 09:30:16

isdkz 发表于 2023-7-22 09:27
要做到每条记录单独占用一行,您需要在每个名字后面添加一个换行符( '\n' )。同时,您需要使用append模式(' ...

能不能不使用with open里面的追加模式a呢?因为我学这本书里面wth open被替换成了pathlib了

isdkz 发表于 2023-7-22 09:33:07

python小小白哟 发表于 2023-7-22 09:30
能不能不使用with open里面的追加模式a呢?因为我学这本书里面wth open被替换成了pathlib了

可以的。尽管 pathlib 模块的 write_text 方法默认是覆盖文件,但我们可以使用其 open 方法配合写入模式实现类似的功能。

下面是如何使用 pathlib.Path.open() 以追加模式打开文件的代码:

from pathlib import Path

while True:
    print("输入q退出")
    a = input("输入你的名字:")
    if a == 'q':
      break

    path = Path("guest_book.txt")
    with path.open('a', encoding='utf-8') as file:
      file.write(a + '\n')


这段代码会创建一个新文件(如果文件不存在)或打开一个现有文件(如果文件已存在),并以追加模式('a')写入数据。这样,每次输入的内容都会添加到文件的末尾,而不会覆盖已有的内容。

另外,注意我们在文件写入操作后使用了 \n 。这是一个特殊字符,代表一个新行,用于确保每次输入的内容都单独占一行。

如果你希望仍然使用Path.write_text并且不覆盖文件,你需要先读取文件原有的内容,然后添加新的内容,最后一起写入。但是这种方式相对较慢,因为它涉及到两次磁盘IO(一次读取,一次写入)。但是如果你非常确定文件内容不会很大,这也是一个可行的方案。

陶远航 发表于 2023-7-22 09:40:21

python小小白哟 发表于 2023-7-22 09:30
能不能不使用with open里面的追加模式a呢?因为我学这本书里面wth open被替换成了pathlib了

你不看看我的回复吗

python小小白哟 发表于 2023-7-22 09:45:49

陶远航 发表于 2023-7-22 09:40
你不看看我的回复吗

因为我这本书是第三版的里面的with open被换成了pathlib了。

陶远航 发表于 2023-7-22 09:47:05

python小小白哟 发表于 2023-7-22 09:45
因为我这本书是第三版的里面的with open被换成了pathlib了。

是可以用a追加的

Mike_python小 发表于 2023-7-22 10:16:38

使用 pathlib 库可以方便地操作文件路径和文件。下面是一个使用 pathlib 并结合 while 循环的示例代码,用于提示用户输入名字并将其写入 guest_book.txt 文件中:


from pathlib import Path

def collect_guest_names():
    # 创建或打开 guest_book.txt 文件
    file_path = Path('guest_book.txt')
    file = file_path.open(mode='a')# 使用 'a' 模式以追加方式打开文件

    try:
      while True:
            name = input("请输入您的名字(输入 'q' 退出):")
            
            if name == 'q':
                break

            # 将名字写入文件,并添加换行符
            file.write(name + '\n')

      print("名字收集完成!")
    finally:
      # 关闭文件
      file.close()

# 调用函数开始收集名字
collect_guest_names()

在这个示例中,我们首先使用Path 类创建了 guest_book.txt 文件的路径。然后,我们使用 open() 方法以追加模式'a' 打开文件。这样可以保证每次写入都会添加到文件末尾而不会覆盖之前的内容。

在 while 循环中,我们提示用户输入名字,并判断如果输入的是 'q' 则跳出循环。否则,我们将名字写入文件,并在名字的末尾添加换行符 \n 以确保每个名字独占一行。

最后,在 finally 块中,我们关闭文件句柄,确保资源的正确释放。

运行示例代码后,每个用户输入的名字都会被写入 guest_book.txt 文件中,并且每个名字都独占一行。当用户输入 'q'退出循环后,名字收集完成并输出提示信息。

请注意,确保运行示例代码的当前工作目录中没有其他同名的文件,否则可能会发生文件冲突。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: python中写入文件每条记录单独占用一行