Change specific value in CSV file via Python

徘徊边缘 提交于 2019-11-26 10:31:34
Diego Navarro

This is the solution opening the csv file, changing the values in memory and then writing back the changes to disk.

r = csv.reader(open('/tmp/test.csv')) # Here your csv file
lines = list(r)

Content of lines:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '23'],
 ['127.0.0.3', '50']]

Modifying the values:

lines[2][1] = '30'

Content of lines:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '30'],
 ['127.0.0.3', '50']]

Now we only have to write it back to a file

writer = csv.writer(open('/tmp/output.csv', 'w'))
writer.writerows(lines)

You can't really replace values in the existing file. Instead, you need to:

  1. read in existing file
  2. alter file in memory
  3. write out new file (overwriting existing file)

What you can also do is read in the existing file line by line, writing it out to a new file, while replacing values on the fly. When done, close both files, delete the original and rename the new file.

You can use very powerful library called pandas. Here is the example.

import pandas as pd
df = pd.read_csv("test.csv")
df.head(3) #prints 3 heading rows

Output:

    Ip  Sites
0   127.0.0.1   10
1   127.0.0.2   23
2   127.0.0.3   50

Now if you want to change the value in the 'Sites' column in the 1st row, run:

df.set_value(1, "Sites", 30)

If you want to change all the values, where 'Ip' is equal to 127.0.0.2, run:

df.loc[df["Ip"]=="127.0.0.2", "Sites"] = 30

Finally, to save the values:

df.to_csv("test.csv", index=False)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!