替换特定行和列中csv python中的特定字符串

时间:2018-06-17 23:49:35

标签: python string python-3.x csv replace

我环顾四周但却没有找到我遇到的问题。

我的问题是在名为registro_usuarios.csv的csv文件中有以下数据。其中有6行和6个colmuns

registro_usuarios.csv:
RUT,Name,LastName,E-mail,ISBN1,ISBN2
111,Pablo1,Alar1,mail1,0,0
222,Pablo2,Alar2,mail2,0,0
333,Pablo3,Alar3,mail3,0,0
444,Pablo4,Alar4,mail4,0,0
555,Pablo5,Alar5,mail5,0,0

现在我如何制作一个def,允许我替换给定RUT的ISBN1或ISBN2以下的0?...例如,我想用777替换rut 333的ISBN1。然后使用def,它应该像这样改变csv中的数据。因为行和列以0,0开头,我相信如果我没有弄错的话,那么车辙333的ISBN1就是第3行第5列。

registro_usuarios.csv:
RUT,Nombre,Apellido,E-mail,ISBN1,ISBN2
111,Pablo1,Alar1,mail1,0,0
222,Pablo2,Alar2,mail2,0,0
333,Pablo3,Alar3,mail3,777,0
444,Pablo4,Alar4,mail4,0,0
555,Pablo5,Alar5,mail5,0,0

2 个答案:

答案 0 :(得分:1)

这是我能想到的最简单的方法:

>>> import csv
>>> with open('data.csv') as f:
...      data = [r for r in csv.reader(f)]
... 
>>> data[3][4] = '777'
>>> with open('data.csv', 'w') as f:
...     csv.writer(f).writerows(data)
...

正如您所提到的,您想要更改具有特定RUT的行。在这种情况下,我会使用DictReader / DictWriter和一个函数来根据RUT更改行:

import csv

def change_by_rut(csv_data, rut, new_isbn1):
    for row in csv_data:
        if row['RUT'] == rut:
            row['ISBN1'] = new_isbn1

with open('data.csv') as f:
    data = [r for r in csv.DictReader(f)]

change_by_rut(data, '333', '777')

with open('data.csv', 'w') as f:
    writer_obj = csv.DictWriter(f, fieldnames=data[0].keys())

    writer_obj.writeheader()
    writer_obj.writerows(data)

答案 1 :(得分:0)

您也可以使用Web.config

pandas