2015-09-08 58 views
0

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

我想要做的是每次都用最新的输出覆盖csv。

此外,我正在处理unicode输出,我使用unicodecsv。我不知道这是否会关闭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']]) 

回答

0

问题是与将数据写入文件的方式。 每当你open文件在r+模式下,你将覆盖最后写入的行。 并处理JSON

+0

感谢您的回复。我改变了我打开文件的方式。我使用了'w',现在每栏只有一个字母。内容被拉到字典内容(使用github3.py库)。现在我失去了如何继续。同样,我的逻辑可能是关闭的,但是如果我打开文件在循环外写入,它应该只打开一次文件,然后继续写入数据(有点像print语句迭代并打印正确的数据到控制台)??任何进一步的帮助将不胜感激。 – DBS

+0

请忽略我的最后回复。你是绝对的,正确的,这是我打开文件的模式,因为它实际上是在一个循环中(把我自己放在头上!!)。谢谢!! – DBS

+0

在'ab +'模式下打开文件看起来像它主要是我想要的,但它从尾部追加文件。我想打开文件(如果不存在则创建)并从头开始追加,基本上擦除内容并以追加模式写入新数据。请让我知道这是否需要单独的问题。谢谢! – DBS