尝试输出到文本文件时出现以下错误:
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()
答案 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
。