【问题标题】:csv merging issue, pythoncsv合并问题,python
【发布时间】:2018-01-25 03:47:09
【问题描述】:

使用以下代码合并 CSV 文件,有时会将数据放在错误的列中。它不会将数据放在 A-D 列中,而是将数据放在 F-J 列中。据我所知,这是新 CSV 的第一行被放入错误的列,但是,不是每个 CSV 文件。

import glob
import codecs
import csv 

my_files = glob.glob("*.csv") 

header_saved = False 
with codecs.open('Final-US-Allies-Expects.csv','w', "UTF-8", 'ignore') as file_out: #save data to
    for filename in my_files:
        with codecs.open(filename, 'r', 'UTF-8', 'ignore') as file_in: 
            header = next(file_in) 
            if not header_saved: 
                file_out.write(header) #write header
                header_saved = True
            for line in file_in:
                file_out.write(line) #write next line

原始代码可在 Merging multiple CSV files without headers being repeated (using Python) 获得(声誉不够高,无法添加到原始问题中)

Visual of issue

我附上了这个问题的图片。我需要能够将每一行写入要写入的列中。

提前感谢您的帮助。

【问题讨论】:

  • 您能否重新格式化您的代码以使缩进清晰?您可以选择在编辑器中将其格式化为代码。
  • 我已经按照你的要求做了。谢谢,对不起。
  • 没问题。你有输入的csv吗?我无法重现该缺陷。
  • 我愿意,但我不能分享数据,因为我个人并不拥有这些数据。我怀疑这是数据框本身的问题,并且由于您无法重现该问题,因此我的怀疑可能是正确的。
  • 您是否在将行添加到文件之前检查行是否以换行符 (\n) 结尾。这可能是个问题。在文件的末尾,该行可能不包含 \n。

标签: python csv merge dataset


【解决方案1】:

看起来您在将行写入文件之前没有检查行是否以换行符结尾。这可能会弄乱对齐方式。你能试试这个吗?

import glob
import codecs
import csv

my_files = glob.glob("*.csv")

header_saved = False
with codecs.open('output.csv','w', "UTF-8", 'ignore') as file_out:
    for filename in my_files:
        with codecs.open(filename, 'r', 'UTF-8', 'ignore') as file_in:
            header = next(file_in)
            if not header_saved:
                file_out.write(header if "\n" == header[-1] else header + "\n")
                header_saved = True
            for line in file_in:
                file_out.write(line if "\n" == line[-1] else line + "\n")

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多