You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何判断写入生成的文件是否为二进制文件类型?

问题说明

我需要发起API调用获取二进制类型的JSON数据,当前代码的文件写入部分参考了两篇Stack Overflow技术帖,现有两个疑问:

  • 下述两段代码生成的文件中,哪个存储的是二进制格式的JSON数据?
  • 已知文件打开模式wb为二进制写入模式,但不确定两个生成的文件是否均为二进制格式,有什么可行方法可以验证文件是否为二进制格式?

我是Python开发与API调用方向的初学者,感谢各位的帮助。

基础请求实现代码

import requests

url = "https://covid-api.com/api/regions?iso=chn"
payload={}
headers = {}
response = requests.request("GET", url, headers=headers, data=payload) 

写入方案1:使用Pickle模块

import pickle

with open("file.pkl","wb") as f:
    pickle.dump(response.content, f)

写入方案2:使用JSON模块

import json

with open("file.json","wb") as f:
    f.write(response.content)

解答

核心结论

两个文件本质都是二进制字节流存储,但只有file.json存储的是通用可解析的二进制格式JSON数据,file.pkl存储的是Pickle序列化后的Python私有格式对象,不属于二进制JSON文件。

原因说明

  • 接口返回的response.content本身就是API输出的原始二进制字节流,你调用的这个公开接口返回的就是UTF-8编码的JSON内容对应的字节数据。
  • 所谓JSON模块的写入代码,虽然导入了json但实际没有调用JSON的序列化方法,只是直接把接口返回的原始JSON字节流通过wb模式写入文件,最终生成的文件和接口返回的内容完全一致,所有支持JSON解析的工具、编程语言都能正常读取这个文件的内容。
  • Pickle模块的写入代码,是把response.content这个Python的bytes类型对象,用Python独有的Pickle序列化协议做了二次封装,生成的pkl文件只能通过Python的pickle.load方法反序列化读取,不属于通用格式。哪怕封装的原始内容是JSON字节,加了Pickle的格式头和结构标记后,就不能被识别为JSON文件了。
  • 补充说明:不存在特殊的"专有二进制JSON"格式,日常提到的二进制存储的JSON,本质就是把JSON文本按UTF-8等编码转成字节流落盘,和普通文本模式写入的JSON文件内容没有本质区别,wb模式只是避免Windows系统下自动修改换行符,不会改变内容本身的格式属性。

文件格式验证方法

方法1:文本编辑器直接打开

用系统自带记事本、VS Code等文本编辑器直接打开目标文件:

  • 如果打开后能看到清晰的{}包裹的键值对JSON结构,说明是标准JSON文件(本质是编码为二进制字节存储的文本内容)
  • 如果打开后大部分是乱码、不可识别的特殊符号,属于非文本类二进制格式
  • 打开file.pkl时会看到开头有特殊的Pickle格式标记,中间夹杂零散的JSON字符,整体结构混乱,无法直接识别为JSON。

方法2:代码校验

直接尝试用JSON模块加载文件,能正常解析的就是合法JSON文件,参考代码:

import json

# 校验file.json
with open("file.json", "rb") as f:
    try:
        json.load(f)
        print("file.json 是合法JSON格式文件")
    except Exception as e:
        print("file.json 不是合法JSON,错误:", e)

# 校验file.pkl
with open("file.pkl", "rb") as f:
    try:
        json.load(f)
        print("file.pkl 是合法JSON格式文件")
    except Exception as e:
        print("file.pkl 不是合法JSON,错误:", e)

运行后可以看到file.json能正常通过校验,file.pkl会抛出JSON解析错误。


内容的提问来源于stack exchange,提问作者biggboss2019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:03:35