鱼C论坛

 找回密码
 立即注册
查看: 1965|回复: 8

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

[复制链接]
发表于 2023-7-22 09:27:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

微信截图_20230722092532.jpg

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

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

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

每次都是覆盖文件,然后就只有一行的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-22 09:27:30 | 显示全部楼层
你好!要让每条记录单独占用一行,你需要在写入文件时添加换行符 \n。这样每次写入的内容就会另起一行。

以下是修改后的代码示例:
from pathlib import Pathwhile 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')
现在,每当用户输入一条记录时,都会在文件中另起一行进行保存。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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') 将输入的名字和一个换行符一起写入文件,这样每个名字都会单独占用一行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

能不能不使用with open里面的追加模式a呢?因为我学这本书里面wth open被替换成了pathlib了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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(一次读取,一次写入)。但是如果你非常确定文件内容不会很大,这也是一个可行的方案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

你不看看我的回复吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-22 09:45:49 | 显示全部楼层
陶远航 发表于 2023-7-22 09:40
你不看看我的回复吗

因为我这本书是第三版的里面的with open被换成了pathlib了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-22 09:47:05 | 显示全部楼层
python小小白哟 发表于 2023-7-22 09:45
因为我这本书是第三版的里面的with open被换成了pathlib了。

是可以用a追加的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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'退出循环后,名字收集完成并输出提示信息。

请注意,确保运行示例代码的当前工作目录中没有其他同名的文件,否则可能会发生文件冲突。
球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 09:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表