使用pycurl获取“csv转储”

时间:2013-09-27 16:02:00

标签: python csv pycurl

我正在尝试自动完成一项繁琐的任务来更新我们的变更请求/ cr / bug的状态。由于DataBase模式非常复杂,我已经向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写入磁盘?

1 个答案:

答案 0 :(得分: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())