【问题标题】:Adding a new column (and data to it) into multiple CSV files in Python在 Python 中将新列(及其数据)添加到多个 CSV 文件中
【发布时间】:2017-07-25 03:41:06
【问题描述】:

我是 Python 的初学者,我一直在努力创建代码以将列添加到一组类似的 csv 文件中。

这是我目前所拥有的:

import csv, os

for csvFilename in os.listdir('.'):
    if not csvFilename.endswith('.csv'):
        continue
    print('Editing file ' + csvFilname + '...')

    file = open(csvFilename)
    reader = csv.reader(file)
    writer = csv.writer(open('new_' + csvFilename, 'w'))
    headers = reader.next()
    headers.append('ColName')
    writer.write(headers)
    for row in reader:
        row.append(str(row[12]) + ' ' + str(row[13]) + " some text")
        writer.write(row)

基本上,我想添加一列,其中我有“第 13 行的文本 + 第 14 行的文本 + 更多文本,每次都一样”。

我在 writer.write(headers) 行收到此错误消息,但是: AttributeError: '_csv.writer' 对象没有属性 'write'

我该怎么办?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    我必须重构您的代码,但这应该最接近您想要实现的目标。您需要进行异常处理并检查该行中是否有超过 13 个元素等。

    import tempfile, os, csv
    
    for csvFilename in os.listdir('.'):
        if not csvFilename.endswith('.csv'):
            continue
        print('Editing file ' + csvFilename + '...')
        with open(csvFilename, 'r') as csvFile:
            reader = csv.reader(csvFile, delimiter=',', quotechar='"')
            with open('new_' + csvFilename, 'w') as tempfile:
                writer = csv.writer(tempfile, delimiter=',', quotechar='"')
                header = True
                for row in reader:
                    if (header):
                        row.append('ColName')
                        writer.writerow(row)
                        header = False
                    else:
                        row.append(str(row[12]) + ' ' + str(row[13]) + " some text")
                        writer.writerow(row)
    

    更多关于 python csv 的信息:https://docs.python.org/3/library/csv.html

    【讨论】:

      【解决方案2】:

      您需要阅读 API 文档,

      https://docs.python.org/3/library/csv.html

      csv.writer 写入函数使用了writerow 而不是write,请检查。

      CSV 文件编写示例,

      import csv
      with open('eggs.csv', 'w', newline='') as csvfile:
          spamwriter = csv.writer(csvfile, delimiter=' ',
                                  quotechar='|', quoting=csv.QUOTE_MINIMAL)
          spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
          spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多