从CSV解析列并使用新值替换文本文件中的值

时间:2018-02-08 13:32:16

标签: python csv

我有一个CSV文件,我想提取它的第一列。我的CSV文件是这样的:

Device ID;SysName;Entry address(es);IPv4 address;Platform;Interface;Port ID (outgoing port);Holdtime
PE1-PCS-RANCAGUA;;;192.168.203.153;cisco CISCO7606 Capabilities  Router Switch IGMP;TenGigE0/5/0/1;TenGigabitEthernet3/3;128 sec
P2-CORE-VALPO.cisco.com;P2-CORE-VALPO.cisco.com;;200.72.146.220;cisco CRS Capabilities  Router;TenGigE0/5/0/0;TenGigE0/5/0/4;128 sec
PE2-CONCE;;;172.31.232.42;Cisco 7204VXR Capabilities  Router;GigabitEthernet0/0/0/14;GigabitEthernet0/3;153 sec
P1-CORE-CRS-CNT.entel.cl;P1-CORE-CRS-CNT.entel.cl;;200.72.146.49;cisco CRS Capabilities  Router;TenGigE0/5/0/0;TenGigE0/1/0/6;164 sec

为此,我使用下面的代码:

import csv

makes = []
with open('csvoutput/topologia.csv', 'rb') as f:
    reader = csv.reader(f)
#    next(reader) # Ignore first row

    for row in reader:
        makes.append(row[0])

print makes

然后我想将第一列的每个值替换为文本文件的特定值,并将其另存为新文件。

原始文本文件:

    PLANNED.IMPACTO_ID = IMPACTO.ID   AND 
    PLANNED.ESTADOS_ID = ESTADOS_PLANNED.ID   AND 
    TP_CLASIFICACION.ID = TP_DATA.ID_TP_CLASIFICACION   AND 
    TP_DATA.PLANNED_ID = PLANNED.ID AND 
    PLANNED.FECHA_FIN >= CURDATE() - INTERVAL 1 DAY AND 
    PLANNED.DESCRIPCION LIKE '%P1-CORE-CHILLAN%’;

预期产出:

    PLANNED.IMPACTO_ID = IMPACTO.ID   AND 
    PLANNED.ESTADOS_ID = ESTADOS_PLANNED.ID   AND 
    TP_CLASIFICACION.ID = TP_DATA.ID_TP_CLASIFICACION   AND 
    TP_DATA.PLANNED_ID = PLANNED.ID AND 
    PLANNED.FECHA_FIN >= CURDATE() - INTERVAL 1 DAY AND 
    PLANNED.DESCRIPCION LIKE 'FIRST_COLUMN_VALUE’;

依此类推第一列中的每个值,并将其另存为单独的文件。

我该怎么做?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您可以只读取文件,应用更改并再次写回文件。没有有效的方法来编辑文件(插入字符的效率不高),你只能重写它。

如果您的文件很大,则不应将整个表保留在内存中。

import csv

makes = []
with open('csvoutput/topologia.csv', 'rb') as f:
  reader = csv.reader(f)
  for row in reader:
      makes.append(row)

# Apply changes in makes

with open('csvoutput/topologia.csv', 'wb') as f:
  writer = csv.writer(f)
  writer.writerows(makes);