问题
I need the way to change specific value of the column of csv file. For example I have csv file:
"Ip","Sites"
"127.0.0.1",10
"127.0.0.2",23
"127.0.0.3",50
and I need to change value 23 to 30 of the "127.0.0.2".
I use csv library: import csv
Appreciate any help as I'm new in Python. Thanks!
回答1:
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)
回答2:
You can't really replace values in the existing file. Instead, you need to:
- read in existing file
- alter file in memory
- 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.
回答3:
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)
来源:https://stackoverflow.com/questions/11033590/change-specific-value-in-csv-file-via-python