将特定列从csv文件复制到特定位置的另一个csv

时间:2016-02-25 09:04:06

标签: python csv copy

我在Python 2.7中尝试过不同的方法,我在这个论坛上看到了将csv文件中的特定列复制到特定位置(列)中的另一个csv文件。

csv1:
Header1 Header2 Header3 Header4
1       2       3       4
1       2       3       4
1       2       3       4
1       2       3       4

csv2:
Header5 Header6 Header7
5       6       7
5       6       7
5       6       7

所以我想将Header2列复制到Header6列上,得到以下

csv2:
Header5 Header2 Header7
5       2       7
5       2       7
5       2       7
        2

每个标头位于不同的单元格中。我尝试了以下(甚至制作第三个文件),但没有成功:

with open('book1.csv', 'r') as book1:
    with open('book2.csv', 'r') as book2:
        reader1 = csv.reader(book1, delimiter=',')
        reader2 = csv.reader(book2, delimiter=',')

        both = []
        fields = reader1.next() # read header row
        reader2.next() # read and ignore header row
        for row1, row2 in zip(reader1, reader2):
            row2.append(row1[-1])
            both.append(row2)

        with open('output.csv', 'w') as output:
            writer = csv.writer(output, delimiter=',')
            writer.writerow(fields) # write a header row
            writer.writerows(both)

有什么想法吗? :)

2 个答案:

答案 0 :(得分:0)

您要附加的列表会水平附加。该行无法知道要附加到其上的下一个项是否属于相邻列或多个列。

解决这个问题的方法是使用最大值(所有列中的最大列长度)来标识标题列的长度。

在你想要的" csv2"输出,与其他标题(3个值)相比,Header2在其列中具有最大数量的值(4个值)。

您要做的是确保所有其他标题的长度等于最大长度(4个值)。

您可以不断向每列添加不相关的项目,以便它可以完美地填充下一列。可以垂直追加到底部短列的示例项可以是空字符串值(""),不适用的字符串值(" NA")或数字像0一样,你不希望在任何数据集列中显示为整数。

答案 1 :(得分:0)

尝试类似:

        for row1, row2 in zip(reader1, reader2):
            newRow = str(row1[0])+","+str(row1[1])+","+str(row1[2])
            both.append(row2)

另外,我建议您不要复制其他代码并将其粘贴为您的解决方案。我建议你尝试至少执行一部分代码并寻求帮助。如果你不添加任何代码也没关系,但如果你不尝试你给它的代码,可能会让人感到困惑,他们无法帮助你。