??为什么我的文件刚刚创建就是不可读的
难绷,我为啥读不了自己的文件????>>> f.write('I love FishC\n')
13
>>> f.readable()
False
>>> f = open('长安街','w')
>>> f.writable()
True
>>> f.readable ()
False
>>> f.writelines (['第一人','毛主席'])
>>> f.write('天和')
2
>>> for each in f:
print(each)
Traceback (most recent call last):
File "<pyshell#136>", line 1, in <module>
for each in f:
io.UnsupportedOperation: not readable
前四行代码是之前的内容,从第五行开始我给f重新赋值了
问题出在你创建文件的方式上。在打开文件时,你需要指定文件的打开模式。在你的代码中,你使用了'w'模式来打开文件,这意味着你只能写入文件,而不能读取文件。因此,当你尝试使用 f.readable() 时,它返回False。
如果你希望既能写入又能读取文件,你可以使用'w+'模式来打开文件。修改你的代码如下:
f = open('长安街', 'w+')
这样,你就可以通过 f.readable() 来检查文件是否可读,并且可以使用 f.read() 来读取文件的内容。
另外,你还需要注意的是,在写入文件后,文件指针会指向文件的末尾。因此,当你尝试使用 for each in f 来遍历文件时,由于文件指针已经在文件末尾,所以不会有任何输出。如果你想遍历文件的内容,你需要将文件指针重新定位到文件的开头。可以使用 f.seek(0) 来实现:
f.seek(0)
for each in f:
print(each)
这样,你就可以正确地遍历文件的内容了。 根据你提供的代码和错误提示,可以看出你在打开文件后使用了 w 模式来写入内容。在这种模式下,文件是以覆盖的方式打开的,意味着如果文件已经存在,则会被清空。因此,创建文件后立即尝试读取它是不可行的,因为文件中没有任何内容可读。
另外,使用 w 模式打开文件后,该文件对象只能进行写操作,而不能进行读操作,因此 f.readable() 返回 False。
由于文件已经被清空,所以无法使用 for each in f 进行迭代读取,因为文件已经为空。
如果你想要先写入文件,然后再读取文件的内容,可以考虑使用 a+ 模式打开文件,这将允许你进行追加写入和读取操作。修正后的代码如下:
f = open('长安街', 'a+')
f.write('I love FishC\n')
f.seek(0)# 将文件指针移动到文件开头
print(f.readable())# True
f.seek(0)# 再次将文件指针移动到文件开头
for line in f:
print(line.strip())
f.close()
在上述代码中,我们使用 a+ 模式打开文件,先写入内容,然后通过 f.seek(0) 将文件指针移动到文件开头,接着可以进行读取操作了。
如果问题已经解决,请设置最佳答案 另外记得及时关闭文件 f.close() 不然文件一直处于占用状态,挂后台了 歌者文明清理员 发表于 2023-8-13 13:49
另外记得及时关闭文件 f.close() 不然文件一直处于占用状态,挂后台了
好的
不枉风来水顺 发表于 2023-8-13 13:51
好的
另外 3 楼回答是错误的,w 模式是写入模式,a 模式是追加,a 模式也不能读,只有 r 模式或者 a+ r+ w+ 才能写入和读取,不过他们之间还是 有区别的,这点可以搜到
,w 模式不是因为没有内容可读,而是模式不对 歌者文明清理员 发表于 2023-8-13 13:59
另外 3 楼回答是错误的,w 模式是写入模式,a 模式是追加,a 模式也不能读,只有 r 模式或者 a+ r+ w+ 才 ...
{:5_105:}
页:
[1]