値訁 2021-04-10 16:03 采纳率: 100%
浏览 49
已采纳

python 读写文件问题(提问者已疯)

def get_video_info(video_name):
    """
    get width, height, frames information of video
    :param video_name: video
    :return:
    """
    name = os.path.basename(video_name).split(".")[0]
    json_file = "./" + name + ".json"
    # Does the reason that add the sudo command in the front result in program stop?
    cmd = ("ffprobe -print_format json -show_format -show_streams -i " +
           video_name + " > " + json_file)
    # 这一块的过程为: 使用subprocess.Popen将cmd的运行结果存储到相应的json文件,如cmd中的">",
    # 然后再由open函数打开文件并转换为python dict格式
    # 1. 第一次(未生成json文件)执行, 报错,再assert语句中, getsize函数未找到文件"No such file or directory",
    # 项目目录中有该文件且文件中有内容.
    # 2. 第二次执行(未删除json文件直接执行), 结果输出正常,打开文件发现文件为空,打开终端到json文件所在目录下,
    # 运行getsize报错"No such file or directory"
    # 3. 第三次运行(未删除json文件直接执行), assert语句报错,打开json文件发现有内容, 终端到json文件所在目录下,
    # 运行getsize报错"No such file or directory", vim打开json有内容
    # 4. 第四次运行(未删除json文件直接执行), 和2一样
    # 5. 第五次运行(未删除json文件直接执行), 和3一样
    # 6. 第六次运行(未删除json文件直接执行), 和2一样
    # ......
    subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)
    assert os.path.getsize(json_file) > 0
    with open(json_file, 'r', encoding='utf8') as f:
        info = f.read()
        print(info)
        info_dict = json.loads(info)
    width = info_dict["streams"][0]["width"]
    height = info_dict["streams"][0]["height"]
    fps = info_dict["streams"][0]["r_frame_rate"]
    print(width, height, fps)
    return width, height, fps

应该是内存写入磁盘的问题,但具体不了解,求教

解决了,就是文件连续写读的问题, 写文件的操作还未把数据从写入磁盘,下一行代码就去读取了

  • 写回答

2条回答 默认 最新

  • 关注

    把错误提示贴出来看看,要不然不好分析呀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog