2012-06-14 76 views
13

我需要改變csv文件列的特定值的方式。例如,我有csv文件:通過Python更改CSV文件中的特定值

"Ip","Sites" 
"127.0.0.1",10 
"127.0.0.2",23 
"127.0.0.3",50 

並且我需要將「127.0.0.2」的值23更改爲30。

我使用CSV庫:導入CSV

感謝所有幫助我在Python是新。謝謝!

+0

所以,我可以從CSV文件讀取和寫入csv文件,但我沒有一個想法如何repace在現有文件中的值... – ihorko

+0

你能發佈讀/寫你已經擁有的代碼?在某些時候,你應該有Python中的數據,你可以在寫之前修改它。 –

回答

26

這是打開csv文件,更改內存中的值,然後將更改寫回到磁盤的解決方案。線

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

內容:

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

修改值:行

lines[2][1] = '30' 

內容:

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

現在我們只能將它寫回文件

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

如果您在寫入的csv中遇到雙重換行問題,您可能想嘗試以二進制形式打開文件:'writer = csv.writer(open('/ tmp/output.csv','wb'))'' – Nitay

+0

您是否必須關閉作者? – pekasus

+0

您應該關閉文件描述符而不是寫入器。您可以使用「with」來管理文件 –

10

您無法真正替換現有文件中的值。相反,你需要:

  1. 讀取現有的文件
  2. 在內存
  3. ALTER文件
  4. 寫出新的文件(覆蓋現有文件)

你也可以做的就是在讀什麼現有的文件逐行寫入到一個新文件中,同時替換實時值。完成後,關閉這兩個文件,刪除原始文件並重命名新文件。

4

您可以使用非常強大的名爲pandas的庫。這裏是例子。

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

輸出:

Ip Sites 
0 127.0.0.1 10 
1 127.0.0.2 23 
2 127.0.0.3 50 

現在,如果你想改變在第1行中的「網站」列中的值,運行:

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

如果你想改變一切其中'Ip'等於127.0.0.2的值,運行:

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

最後,保存值:

df.to_csv("test.csv", index=False)