【问题标题】:Python 2.7 CSV writer issuePython 2.7 CSV 写入器问题
【发布时间】:2015-09-08 03:16:31
【问题描述】:

我有一些 Python 代码列出了 Github 中的拉取请求。如果我将解析的 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']])

【问题讨论】:

    标签: python json python-2.7 csv


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我改变了调用文件打开的方式。我使用了w,现在每列只有一个字母。内容被提取为字典内容(使用 github3.py 库)。现在我迷失了如何进行。同样,我的逻辑可能不正确,但如果我打开文件以在循环外写入,它应该只打开文件一次,然后继续写入数据(有点像 print 语句正在迭代并打印正确的数据到控制台)??任何进一步的帮助将不胜感激。
    • 请忽略我最后的回复。你是绝对正确的,这是我打开文件的模式,因为它实际上是在一个循环中(拍自己的脑袋!!)。谢谢!!
    • ab+ 模式打开文件看起来大部分是我想要的,但它从末尾附加文件。我想打开文件(如果不存在则创建)并从头开始追加,本质上是擦除内容并以追加模式写入新数据。如果这需要一个单独的问题,请告诉我。谢谢!
    • 看来我必须在循环外打开它以进行读写,然后在循环内追加...
    猜你喜欢
    • 2021-05-07
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多