2012-06-14 4 views
13

के माध्यम से सीएसवी फ़ाइल में विशिष्ट मान बदलें मुझे सीएसवी फ़ाइल के कॉलम के विशिष्ट मान को बदलने का तरीका चाहिए। उदाहरण के लिए मेरे पास सीएसवी फ़ाइल है:पाइथन

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

और मुझे "127.0.0.2" के मूल्य 23 से 30 को बदलने की आवश्यकता है।

मैं सीएसवी पुस्तकालय का उपयोग करें: आयात सीएसवी

किसी भी मदद की सराहना के रूप में मैं अजगर में नए हूँ। धन्यवाद!

+0

तो, मैं csv फ़ाइल से पढ़ सकते हैं और csv फ़ाइल को लिख सकते हैं, लेकिन मैं इसका अंदाज़ा लगा सकते repace मौजूदा फाइल में मूल्यों के लिए ... – ihorko

+0

आप पोस्ट नहीं किया जा सका है आपके पास पहले से मौजूद कोड पढ़ें/लिखें? किसी बिंदु पर आपके पास पायथन में डेटा होना चाहिए और आप लिखने से पहले इसे संशोधित कर सकते हैं। –

उत्तर

26

यह सीएसवी फ़ाइल खोलने का समाधान है, स्मृति में मानों को बदल रहा है और फिर डिस्क में परिवर्तन वापस लिख रहा है।

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

यदि आप लिखित सीएसवी पर डबल लाइनबैक समस्या में भाग लेते हैं, तो आप फ़ाइल को बाइनरी के रूप में खोलने का प्रयास करना चाहेंगे: 'writer = csv.writer (open ('/ tmp/output.csv', 'wb'))' – Nitay

+0

क्या आपको लेखक को बंद करना है? – pekasus

+0

आपको फ़ाइल डिस्क्रिप्टर को बंद करना चाहिए लेकिन लेखक नहीं। आप फ़ाइलों को प्रबंधित करने के लिए "साथ" का उपयोग कर सकते हैं –

10

आप वास्तव में मौजूदा फ़ाइल में मानों को प्रतिस्थापित नहीं कर सकते हैं। इसके बजाय, आप की जरूरत है:

  1. मौजूदा फ़ाइल में पढ़ने
  2. स्मृति में
  3. बदलने फ़ाइल
  4. नई फ़ाइल (अधिलेखित मौजूदा फ़ाइल) को लिखने

क्या आप भी है में पढ़ा जाता है कर सकते हैं लाइन द्वारा मौजूदा फ़ाइल लाइन, इसे एक नई फाइल में लिखना, जबकि फ्लाई पर मूल्यों को बदलना। जब पूरा हो जाए, तो दोनों फाइलों को बंद करें, मूल को हटाएं और नई फ़ाइल का नाम बदलें।

4

आप पांडा नामक बहुत शक्तिशाली लाइब्रेरी का उपयोग कर सकते हैं। उदाहरण यहाँ है।

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) 

आप सभी बदलना चाहते हैं मान, जहां 'आईपी' 127.0.0.2 के बराबर है, रन:

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

अंत में, मूल्यों को बचाने के लिए:

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