Python:向现有csv-fi添加一列和一行数据

2024-09-27 07:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我能够创建一个csv文件与必要的头,然后附加与输出。现在我想重新打开csv,创建另一个头,然后根据ifelse条件将数据添加到行中。在

当我将结果打印到控制台时,我得到了所需的输出(如下所示),但是当我试图将输出附加到csv文件时,我没有看到相同的结果。在

Title:  update 1
Added or Deleted Files: True
Title:  update 2
Added or Deleted Files: False
Title:  update 3
Added or Deleted Files: False

我相信在打开csv文件时,if条件是如何执行的,但我似乎无法判断出哪里出了问题。新列Add or Deleted Files已创建,但添加到其下的行的值与我在控制台中获得的输出不匹配,这是正确的输出。Added or Deleted Files列下的输出都是True,而不是控制台输出中显示的TrueFalseFalse。拉请求的Title列和标题都被正确捕获,新的csv文件中的新列也是如此,Added or Deleted Files下的值不正确(如下面的输出所示)。在

^{pr2}$

代码包含打印到控制台和输出到csv。提前谢谢你的帮助。最后的with open语句打开了现有的csv,创建了一个新的csv,然后添加了列,但是不正确的行数据给我带来了麻烦。在

with open(filename, 'w+', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['Title'])

for prs in repo.pull_requests():
    getlabels = repo.issue(prs.number).as_dict()

    if 'ready-to-merge' in [getlabels['name'] for getlabels in getlabels['labels']] and 'Validation Succeeded' in [getlabels['name'] for getlabels in getlabels['labels']]:
        changes = repo.pull_request(prs.number).as_dict()

        #print to console statement
        print('Title: ', changes['title'])

        #output to csv
        with open(filename,'a+',newline='') as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow([changes['title']])

        #print to console
        if 'added' in (data.status for data in repo.pull_request(prs.number).files()) or 'removed' in (data.status for data in repo.pull_request(prs.number).files()):
            print('Added or Deleted Files: True')
        else:
            print('Added or Deleted Files: False')

        #output to new csv with added column and new data
        with open(filename, 'r') as csvinput:
            with open(filename2, 'w') as csvoutput:
            writer = csv.writer(csvoutput, lineterminator="\n")
            reader = csv.reader(csvinput)
            all = []
            row = next(reader)
            row.append('Added or Deleted Files')
            all.append(row)
            for row in reader:
                all.append(row)
                if 'added' in (data.status for data in repo.pull_request(prs.number).files()) or 'removed' in (data.status for data in repo.pull_request(prs.number).files()):
                    row.append('True')
                else:
                    row.append('False')
            writer.writerows(all)

Tags: orcsvinfalseaddedfordatatitle
1条回答
网友
1楼 · 发布于 2024-09-27 07:17:27

你的代码结构被破坏了。发生的情况如下:

  • 打开csv文件,写入标题行,关闭
  • 循环切换请求
    • 将请求添加到csv文件(通过open、append、close)
    • 打开第二个文件并将其清除(由于“w”模式)
    • 对于csv中的每一行
      • 从csv文件复制字段
      • 当前请求的复制状态

因此,您的结果文件是在上一次请求迭代中被完全写入的,并且最后一次请求的第2列的值被一致地复制到每一行。在

你的代码应该是:

with open(filename, 'w+', newline='') as f, open(filename2, 'w') as csvoutput:
    csv_writer = csv.writer(f)
    writer = csv.writer(csvoutput, lineterminator="\n")
    row = ['Title']
    csv_writer.writerow(row)
    row.append('Added or Deleted Files')
    writer.writerow(row)

    for prs in repo.pull_requests():
        ...
        row = [changes['title']]
        csv_writer.writerow(row)
        csv_writer.writerow([changes['title']])
        ...
        if 'added' in (data.status for data in repo.pull_request(prs.number).files()) or 'removed' in (data.status for data in repo.pull_request(prs.number).files()):
            row.append('True')
        else:
            row.append('False')
        writer.writerow(row)

即:

  • 在块的开头打开一次文件,只在最后关闭它们。在
  • 处理repo.pull_requests()中的元素时,一次一行写入两个文件
  • 在写入csv文件后和写入第二个文件之前,将第二列附加到行。在

相关问题 更多 >

    热门问题