如何将列表添加到文件.tx中

2024-05-17 19:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想在customer.txt文件中添加一个客户名

[1, “Amin Milani Fard”, “Columbia College”, 778]
[2, “Ali”, “Douiglas College”, 77238]
def addingcustomer(file_name,new_name):
    f=open(file_name,'w')
    for line in f:
        if new_name==line:
            return ("already existed")
        elif new_name!=line:
            f.write(str(new_name)+"\n")
            return ("succesfully added")

它给了我这个错误:

Traceback (most recent call last):
  File "C:\Users\Yuvinng\Desktop\Customer assignment 1\Customer assignment 2", line 77, in <module>
    function(c)
  File "C:\Users\Yuvinng\Desktop\Customer assignment 1\Customer assignment 2", line 26, in function
    print (addingcustomer("customerlist.txt",x))
  File "C:\Users\Yuvinng\Desktop\Customer assignment 1\Customer assignment 2", line 60, in addingcustomer
    for line in f:
io.UnsupportedOperation: not readable

Tags: nameintxtnewforlinecustomerusers
3条回答

您正在使用w打开文件,这意味着您请求只写权限。然后尝试遍历文件中的所有行,这显然是一个读取操作。IIRC您应该使用r+w+a+打开文件,这取决于您想要的行为(read here for a description)。此外,正如mh512所提到的,当您使用完文件后,使用f.close()关闭文件通常是一个好主意。

不过,您可能还想重新考虑您的算法。

for line in f:
   if new_name==line:
      return ("already existed")
   elif new_name!=line:
      f.write(str(new_name)+"\n")
      return ("succesfully added")

对于它处理的每一行,如果它等于新名称,则返回"already existed",或者将新名称写入文件并返回。因此,这个循环总是在第一行之后返回。此外,即使该名称在以后的某个时间点已经存在,如果它不在第一行,它也将再次写入该文件。因为这是家庭作业,我不会给你完整的解决方案,但作为一个提示,你可能想在你决定做什么之前,循环所有的行。

以下是一些可能导致错误的原因:

  1. 你的开头是:“我本来想在acustomer.txt文件中添加一个客户名”,但你发布的堆栈跟踪显示,你试图读取的文件是“customerlist.txt”。

  2. 您正在使用带有“w”的文件打开函数作为写入权限。尝试使用“r”或“wr”。

E

完成后,您可能也想关闭文件。

f.close()

相关问题 更多 >