【问题标题】:Python 3 How do I append a list in a file?Python 3 如何在文件中追加列表?
【发布时间】:2016-06-02 00:55:18
【问题描述】:

这是我的文件的数据:

  • 约翰·史密斯,5 岁
  • 卢克·史密斯,7 岁
  • 玛丽·史密斯,8 岁
  • 鲍比·史密斯,2 岁

我希望能够将另一个号码添加到文件中的特定用户。见下文(玛丽)。

  • 约翰·史密斯,5 岁
  • 卢克·史密斯,7 岁
  • 玛丽·史密斯,8 岁、6 岁
  • 鲍比·史密斯,2 岁

我的代码:

with open('filename.txt','a') as file:
    file.write("\n{}, {}".format(name,number))

这段代码可以很好地追加/写入文件,但它每次都会写入新用户,我不希望它这样做。我希望它检查用户是否已经在文件中,并在该行附加新号码。如果用户不存在,请将其添加到文件中。

【问题讨论】:

  • 您不能只将内容插入文件中。做你想做的最安全的方法是将整个文件读入内存,进行修改,然后将修改后的版本写回磁盘。如果文件巨大,您可以避免重新编写整个文件,而只需从更改开始的位置开始编写,但这有点复杂。
  • 嘿,感谢您对此的建议。你能指出我在正确的地方/给我看一个例子,所以我可以再试一次吗?谢谢。
  • PS,这是一个小文件
  • @Potter 最好使用 .csv 文件而不是 .txt。
  • @R. Murray,谢谢。我确实尝试过使用 .csv 进行操作,但网络上并没有太多内容。我确实设法写入了 csv,但遇到了同一个块 - 无法附加现有行,只能让它插入新行。

标签: python list file append


【解决方案1】:

试试这个

value = 5
user = input('Please enter a username: ')

with open('myfile.txt', 'r+') as f:
    var = f.readlines()
    if user in ''.join(var):
        for count, line in enumerate(var):
            if user in line:
                found = line.strip() + ', ' + str(value) + '\n'
                var[count] = found
    else:
        '{} not in the file but has been added'
        var.append(user + ' ' + str(value) + '\n')

with open('myfile.txt', 'w') as f:
        f.writelines(var)

应该有比打开文件两次更好的方法,但它可以工作

【讨论】:

  • 谢谢 - 这就是我想要的。我唯一的问题是如何调整 else 以包含新名称?第一部分按预期工作,但我想修改一下,以便它可以处理新名称。谢谢!
  • 所以我试过这个:thelist = str([name, number]) .... else: var.append(thelist) 但它会覆盖文件中的所有内容,而不是插入新行在底部....谢谢
  • 我已经更新了我的答案,这次我使用readlines() 将整个文件读入内存。如果文件非常大,这不是很有效,但对于像你这样的情况应该足够了
  • 嗨,danidee,我只想对您今天的所有帮助表示感谢。我学到了很多东西,你帮了我很多 - 谢谢!
【解决方案2】:

这将起作用:

file = open('filename.txt','r')
file.read()
data = file.replace('Mary Smith, 8', 'Mary Smith, 8, 6')
file.close()
file = open('filename.txt', 'w')
file.write(data)
file.close()

【讨论】:

  • 你应该总是使用 with 打开文件,以防你忘记关闭它(你没有关闭第二个文件)
  • 感谢您的意见,我没想到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2014-05-09
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多