提问人:tfam 提问时间:10/10/2023 更新时间:10/10/2023 访问量:54
为什么我从os.open()获得int作为返回值?
Why am I getting int as a return value from os.open()?
问:
我正在使用 json 模块做某事,但每当我使用 json.dump 或 json.load 函数时,我都会收到一个错误,说 int 没有 .write() 或 .read() 函数。这意味着使用 os.open(“somefile.txt”) 给了我一个 int 而不是普通文件 obj。
如果我尝试这样的事情:
import os
import json
file = os.open("Some_file.json", flags= os.RDWR | os.TRUNC)
data = {"something": "something"}
json.dump(data, file)
我收到这样的错误:
AttributeError: 'int' object has no attribute 'write'
我正在使用 Python 3.12
我尝试通过将 .dumps 和 .loads 与 os.read() 中的字符串一起使用来解决它,但 .loads() 不适用于字符串中的文件。
我尝试了这样的事情:
import os
import json
file = os.open("Some_file.json", flags= os.RDONLY | os.TEXT)
raw_data = os.read(file)
decoded_data = raw_data.decode()
data = json.loads(decoded_data)
并得到了这个:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
有没有办法再次获取正常的文件对象,或者有没有办法解决此问题?
答:
-1赞
nisakova
10/10/2023
#1
你能打开一个文件进行写入并转储json数据吗
with open("Some_file.json", 'w') as file:
data = {"something": "something"}
json.dump(data, file)
评论
0赞
tripleee
10/10/2023
不过,这不是他们要问的(没关系,这可能是他们应该问的)
评论
os.open()
记录为返回文件描述符,该描述符是一个整数。如果要将其转换为 Python 文件对象,请调用os.fdopen(file, "w")
open()
os.fdopen()
open()
os.TEXT
os.read()
os.RDONLY | os.TEXT
应该是os.O_RDONLY | os.O_TEXT
os.fdopen()