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

2024-10-01 09:22:46 发布

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

我环顾四周,但没有完全找到我有什么问题。你知道吗

我的问题是在csv文件中称为registro_用户.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?。。。例如,我想将rut333的ISBN1替换为777。然后在使用def之后,它应该像这样更改csv中的数据。因为行和列都以0,0开头,所以如果我没弄错的话,rut333的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

Tags: csv数据mailregistrorutmail1usuariosmail2
2条回答

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

>>> 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来更改行。在这种情况下,我将使用^{}/^{}和函数根据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)

您也可以使用pandas

# recreate file
from pathlib import Path

Path('temp.txt').write_text("""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""")

import pandas as pd
df = pd.read_csv('temp.txt', index_col=0)
df.loc[333,'ISBN1'] = 777
print(df)
# export example
df.to_csv('temp2.txt')

相关问题 更多 >