【问题标题】:Extra row appended when adding columns to CSV file向 CSV 文件添加列时附加的额外行
【发布时间】:2017-08-15 18:25:49
【问题描述】:

我正在读取 CSV 文件、删除标题并附加两列数据。一切都很好,除了最后添加了一行。例如,如果我有以下输入文件:

headerA | headerB | headerC
   a    |    b    |    c
   d    |    e    |    f

我希望输出文件看起来像:

   a    |    b    |    c    |    g    |    h
   d    |    e    |    f    |    g    |    h

但结果是这样的:

   a    |    b    |    c    |    g    |    h
   d    |    e    |    f    |    g    |    h
   g    |    h

我终其一生都无法弄清楚为什么会这样。如果有人有解决方案,将不胜感激。这是我的代码:

for fileName in os.listdir(inPath):
    if fileName.endswith('.csv'):
        with open(inPath + fileName, 'rb') as csvin:
            reader = csv.reader(csvin, delimiter=',')
            i = reader.next()
            with open(outPath + 'wrng_' + fileName, 'wb') as csvout:
                writer = csv.writer(csvout, delimiter=',')                         
                for row in reader:
                    j = fileName.split("_")[1].replace(".csv","")
                    row.append(j[2:-7] + '-' + j[4:-5] + '-' + j[:2] + ' ' + j[7:-2] + ':' + j[9:] + ':00')
                    row.append(i[1].split(" ")[2][:-1])
                    writer.writerow(row)

【问题讨论】:

  • CSV 文件末尾是否有空行?
  • @roganjosh 当我使用extend() 时,它会将其拆分为单独的字符,因此“1000”会变成“1,0,0,0”。当我使用extend() 时,我仍然会在最后添加额外的行。
  • @digitaLink 是的,有。我试图在某处添加一个 if 语句来捕获空行,但不知道该怎么做。那会是解决方案吗?
  • 空白行是问题...在for row in reader: 下添加了if row: 语句。谢谢你们!
  • 您应该考虑使用glob.glob('*.csv'),这将缩短您的代码并帮助减少一些ifs - docs.python.org/2/library/glob.html

标签: python python-2.7 csv


【解决方案1】:

(来自 cmets 的总结)看起来您遇到的问题可能是由文件末尾的空行引起的。您可以在 for 循环中检查该行是否为空。

for row in reader:
    if row:
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多