0

我正在尝试自动化一项繁琐的任务来更新我们的变更请求/cr/错误的状态。由于数据库模式非常复杂,我求助于向 Web 服务器发出 curl 命令来下载 CR 的转储及其相关状态。我正在处理一个os.system()电话,但我决定让它更加pythonic并使用pycurl。我认为问题在于,当我将下载的 csv 写入磁盘时,当我去访问它时(就在c.perform(). 我被引导相信这一点,因为错误显示list index out of range. 但是当我自己打开文件时,看起来所有数据都在那里。这是代码片段(在 find_bugs 方法中,我在每一行上发出拆分并索引到每一行的相关列 - 那'

f = open(cr_file, 'w+')

c = pycurl.Curl()
c.setopt(c.URL, csv_url)
c.setopt(c.WRITEFUNCTION, f.write)
c.setopt(c.HTTPHEADER, headers)
c.perform()


with open(cr_file, 'r') as f:
  ids = find_bugs(f.readlines())

问题:当我需要在完成后立即访问文件时,如何使用 pycurl 写入磁盘?

4

1 回答 1

1

在第一个文件对象被刷新/关闭之前,文件内容可能不在文件中。

>>> f = open('text.csv', 'w+')
>>> f.write('asdf')
>>>
>>> f2 = open('text.csv', 'r')
>>> f2.read()
''
>>> f2.close()

之后close

>>> f.close()
>>> f2 = open('text.csv', 'r')
>>> f2.read()
'asdf'

因为您使用w+模式打开文件,所以您可以使用该文件对象来读取内容:

with open(cr_file, 'w+') as f:
    c = pycurl.Curl()
    c.setopt(c.URL, csv_url)
    c.setopt(c.WRITEFUNCTION, f.write)
    c.setopt(c.HTTPHEADER, headers)
    c.perform()

    f.seek(0)
    ids = find_bugs(f.readlines())
于 2013-09-27T16:06:34.847 回答