如何在Python中替换CSV文件中的列?

2024-07-05 08:58:55 发布

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

我有两个csv文件。我需要将一个文件中的列替换为另一个文件中的列,但它们必须根据ID列进行排序。

下面是一个例子:

文件1:

ID, transect, 90mdist                                      
1, a, 10,                                                  
2, b, 20,                                                
3, c, 30,     

文件2:

ID, transect, 90mdist                                
1, a, 50                                                   
2, b, 70                                                     
3, c, 90          

基本上,我用正确的90mdist创建了一个新文件,我需要将它插入到旧文件中,但它必须与相同的ID#对齐。

据我所知,Python将csv文件视为字符串。所以我要么用字典要么把数据转换成列表然后再修改?哪条路最好?

任何帮助都将不胜感激!!


Tags: 文件csv数据字符串id列表字典排序
3条回答

试试这个:

from __future__ import with_statement

import csv

def twiddle_csv(file1, file2):
    def mess_with_record(record):
        record['90mdist'] = 2 * int(record['90mdist']) + 30
    with open(file1, "r") as fin:
        with open(file2, "w") as fout:
            fields = ['ID', 'transect', '90mdist']
            reader = csv.DictReader(fin, fieldnames=fields)
            writer = csv.DictWriter(fout, fieldnames=fields)
            fout.write(",".join(fields) + '\n')
            reader.next()   # Skip the column header
            for record in reader:
                mess_with_record(record)
                writer.writerow(record)

if __name__ == '__main__':
    twiddle_csv('file1', 'file2')

有几个注意事项:

  • 听写器似乎使用第一行 作为数据,即使它与 领域。调用reader.next()跳过。
  • 数据行不能有尾随逗号。它们将被解释为空列。
  • DictWriter似乎没有写出列标题。自己动手做。

Python库中的CSV Module就是这里需要的。

它允许您读写CSV文件,将行处理为元组或项目列表。

只需读入具有正确值的文件,将存储在一个用行的ID键控的字典中

然后读取第二个文件,用dict中的数据替换相关列,并写入第三个文件。

完成。

如果你只是一次性地这么做,为什么还要用Python呢?Excel或OpenOffice Calc将为您打开两个CSV文件,然后您只需将列从一个剪切并粘贴到另一个。

如果这两个id列表不完全相同,那么一个简单的VB宏就可以帮您完成。

相关问题 更多 >