gpt4 book ai didi

python - 为什么这个文件不会写入文件系统

转载 作者:行者123 更新时间:2023-12-04 19:03:44 25 4
gpt4 key购买 nike

我有一个使用 urllib2.urlopen 获取文件的 python 脚本.本质上,流程是:

  • 查找带有 if-not-modified 的文件 header ,如果它是
    修改,对其进行处理并将其副本写入文件系统
  • 如果没有,请获取我们存储的文件的本地副本
    以前的请求并对其进行处理
  • 如果没有本地副本且未修改,则其
    脚本第一次运行所以我们需要做同样的
    没有 if-not-modified 的请求 header 并将该副本存储在本地
    还有

  • 最后一部分的代码没有按预期工作。请参阅下面处理第三种情况的代码:
    except IOError, e:
    #This is the first attempt to download the file.
    pathWithNoHeader = ROOT_PATH + uri
    requestWithNoHeader = urllib2.Request(pathWithNoHeader)
    sourcefileWithNoHeader = urllib2.urlopen(requestWithNoHeader)
    document = ET.parse(sourcefileWithNoHeader)
    dir = os.path.dirname(__file__)
    statefile = open(os.path.join(dir, STATE_FILES) + uri, 'w+')
    statefile.write(sourcefileWithNoHeader.read())
    statefile.close()

    这成功地获取了文件(我知道,因为我正在尝试处理信息的其他事情正在成功)但是将文件写入文件系统失败并且没有错误。本质上,文件已创建,但它是空的。我是 Python 新手(几个月),对此我完全感到困惑。 statefile.write(sourcefileWithNoHeader.read())似乎是罪魁祸首,但同样的代码在其他地方也能正常工作。任何帮助,将不胜感激

    最佳答案

    问题是您首先调用:

    document = ET.parse(sourcefileWithNoHeader)

    如果我没记错的话是对元素树的调用。这将已经读取文件的内容,因此后续读取将返回空字符串。您可以确认此打印结果:
    sourcefileWithNoHeader.read()

    在写之前。

    要解决此问题,只需将内容保存到 StringIO 在解析它之前
    contents = StringIO(sourcefileWithNoHeader.read())
    ET.parse(contents)
    statefile.write(contents.getvalue())

    关于python - 为什么这个文件不会写入文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491696/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com