不枉风来水顺 发表于 2023-8-13 13:35:25

??为什么我的文件刚刚创建就是不可读的

难绷,我为啥读不了自己的文件????

>>> 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


不枉风来水顺 发表于 2023-8-13 13:36:26

前四行代码是之前的内容,从第五行开始我给f重新赋值了

isdkz 发表于 2023-8-13 13:35:47

问题出在你创建文件的方式上。在打开文件时,你需要指定文件的打开模式。在你的代码中,你使用了'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)


这样,你就可以正确地遍历文件的内容了。

陶远航 发表于 2023-8-13 13:36:11

根据你提供的代码和错误提示,可以看出你在打开文件后使用了 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) 将文件指针移动到文件开头,接着可以进行读取操作了。
如果问题已经解决,请设置最佳答案

歌者文明清理员 发表于 2023-8-13 13:49:45

另外记得及时关闭文件 f.close() 不然文件一直处于占用状态,挂后台了

不枉风来水顺 发表于 2023-8-13 13:51:23

歌者文明清理员 发表于 2023-8-13 13:49
另外记得及时关闭文件 f.close() 不然文件一直处于占用状态,挂后台了

好的

歌者文明清理员 发表于 2023-8-13 13:59:47

不枉风来水顺 发表于 2023-8-13 13:51
好的

另外 3 楼回答是错误的,w 模式是写入模式,a 模式是追加,a 模式也不能读,只有 r 模式或者 a+ r+ w+ 才能写入和读取,不过他们之间还是 有区别的,这点可以搜到
,w 模式不是因为没有内容可读,而是模式不对

不枉风来水顺 发表于 2023-8-15 12:17:07

歌者文明清理员 发表于 2023-8-13 13:59
另外 3 楼回答是错误的,w 模式是写入模式,a 模式是追加,a 模式也不能读,只有 r 模式或者 a+ r+ w+ 才 ...

{:5_105:}
页: [1]
查看完整版本: ??为什么我的文件刚刚创建就是不可读的