防止文本文件末尾出现空行

13 浏览
0 Comments

防止文本文件末尾出现空行

这个问题已经有了答案

为什么文本文件应该以换行符结束?

我在 Python 中创建了一个程序,使用 .txt 文件作为数据库,以此保存用户数据。

该数据以以下方式存储在文件中:

  • 文件中的每一行表示一个用户
  • 用户存储为:用户ID,名字,姓氏,电话号码,国家

当我尝试删除文件中的最后一个用户时,问题就出现了,因为它会留下一个空行,从而破坏程序中列出用户的功能。

例如:

假设在文本文件中有两个用户:image1

现在我删除了最后一个用户(00002):image2

因此,有一行空行,当我添加一个新用户时,它看起来像这样:image3

以下是我用于删除用户的代码:

def delete_user(file, user_id):
    with open(file, 'r+') as f:
        users = f.readlines()
        f.seek(0)
        for user in users:
            if user.split(',')[0] != user_id:
                f.write(user)
        f.truncate()

以下是我用于添加用户的代码:

def add_user(file, first_name, last_name, phone_number, country):
    filesize = os.path.getsize(file)
    with open(file, 'r+') as f:
        if filesize == 0:
            f.write(f'{"1".zfill(5)},{first_name},{last_name},{phone_number},'
                    f'{country}')
        else:
            last_line = f.readlines()[-1]
            user_id = int(last_line.split(',')[0])
            f.write(f'\n{str(user_id+1).zfill(5)},{first_name},{last_name},'
                    f'{phone_number},{country}')

经过调查,我发现问题是因为在最后一行末尾留下了一个换行符(\\n),这个换行符不应该在那里。

那么,我该如何解决这个问题?

admin 更改状态以发布 2023年5月19日
0
0 Comments

尾随的换行符不应该破坏你的程序。你似乎使用换行符作为分隔符,但在类Unix操作系统上,换行符实际上被认为是行终结符,这意味着每行都应该有一个换行符。

然而,如果你使用标准数据格式,将会更容易处理。你正在使用的类似于CSV,所以我推荐使用csv.DictReadercsv.DictWriter,这也将涉及将列标题放入文件中以标记字段。你可能还考虑使用Pandas(例如pandas.read_csv()df.to_csv())。

0