Python 2.7 CSV编写器问题

时间:2015-09-08 03:16:31

标签: python json python-2.7 csv

我有一些Python代码列出了Github中的pull请求。如果我将解析的json输出打印到控制台,我得到预期的结果,但是当我将解析的json输出到csv文件时,我得不到相同的结果。它们在第六个结果之后被切断(并且变化)。

我尝试做的是每次使用最新输出覆盖csv。

另外,我正在处理使用unicodecsv的unicode输出。我不知道这是否会抛出csv输出。

我将使用print语句和csv代码列出相关代码段的两个实例。

感谢您的帮助。

import sys
import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)
import csv
import unicodecsv

for pr in result:
    data = pr.as_dict()
    changes = (gh.repository('my-repo', repo).pull_request(data['number'])).as_dict()   
    if changes['commits'] == 1 and changes['changed_files'] == 1:
        #keep print to console for testing purposes
        print "Login: " + changes['user']['login'] + '\n' + "Title: " + changes['title'] + '\n' + "Changed Files: " + str(changes['changed_files']) + '\n' + "Commits: " + str(changes['commits']) + '\n'

使用csv:

import sys
import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)
import csv
import unicodecsv
for pr in result:
    data = pr.as_dict()
    changes = (gh.repository('my-repo', repo).pull_request(data['number'])).as_dict()   
    if changes['commits'] == 1 and changes['changed_files'] == 1:
       with open('c:\pull.csv', 'r+') as f:
            csv_writer = unicodecsv.writer(f, encoding='utf-8')
            csv_writer.writerow(['Login', 'Title', 'Changed files', 'Commits'])
            for i in changes['user']['login'], changes['title'], str(changes['changed_files']), str(changes['commits']) :
                csv_writer.writerow([changes['user']['login'], changes['title'],changes['changed_files'], changes['commits']])

1 个答案:

答案 0 :(得分:0)

问题在于您将数据写入文件的方式。 每次openr+模式文件时,您都会覆盖最后写入的行。 并处理JSON