【问题标题】:Replace particular string in csv python in a particular row and column在特定行和列中替换csv python中的特定字符串
【发布时间】:2018-06-17 23:49:34
【问题描述】:

我环顾四周,但没有完全找到我的问题。

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

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

现在我如何制作一个允许我替换给定 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

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 谢谢,这给了我一些用处。我现在将尝试编写代码。
    【解决方案2】:

    你也可以使用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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多