未知的错误消息

时间:2016-04-20 13:49:43

标签: python file python-3.x

尝试输出到文本文件时出现以下错误:

 io.UnsupportedOperation: not writable.

我的代码:

    def PostCodeStore(self):
       #Opens the Postcode file in append mode
       file = open("PostCode_File.txt", "r")

       PostCodeValue= PostCodeVar.get()

       #Writes the Postcode value to the file and adds a new line
       file.write(PostCodeValue + "\n")

       #Closes the file so it saves the value
       file.close()

2 个答案:

答案 0 :(得分:3)

原因是您无法写入使用'r'打开的文件。您必须使用'a'打开。来自文档:

  

第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。 模式可以是' r'当只读取文件时,' w'仅用于写入(将擦除具有相同名称的现有文件),并且' a'打开要追加的文件;写入文件的任何数据都会自动添加到最后。 ' R +'打开文件进行读写。 mode参数是可选的; ' R'将被假设,如果它被省略。

     

在Windows上,' b'附加到模式后以二进制模式打开文件,因此还有类似' rb',' wb'和' r + b'等模式。 Windows上的Python区分了文本和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动稍微改变。这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据。在读取和写入此类文件时要非常小心地使用二进制模式。在Unix上,附加一个' b'到模式,所以你可以独立于平台使用所有二进制文件。

这是一个常见问题,并且(如文档中所示)在编写交叉兼容程序时可能会导致一些问题,因为Windows对二进制文件具有不同的权限集。你可能不会使用二进制文件(也许是zipfiles),所以我不会太担心这个。记住:

'w'  # Writing
'r'  # Reading (default)
'a'  # Appending
'r+' # Read/Write

我相信我理解你的问题。也就是说,你的程序想要一次编写多行(追加)。如果您不想这样做而只想在文件中添加换行符,则需要使用'w'

另外(作为旁注),Python类名通常以大写字母开头。这就是PostCodeValue显示不同格式的原因。通常,像这样的变量应该用小写字母和下划线命名,例如post_code_value

答案 1 :(得分:0)

你错了

   file = open("PostCode_File.txt", "r")#Opens the Postcode file in append mode

r为模式,您将文件以只读方式打开,而不是追加。那是a