2015-01-27 6 views
7

मैं अपनी सीएसवी फ़ाइल में एक हेडर जोड़ने की कोशिश कर रहा हूं।सीएसवी फ़ाइल के लिए एक शीर्षलेख संलग्न करें?

मैं एक .csv फ़ाइल से डेटा आयात कर रहा हूं जिसमें डेटा के दो कॉलम हैं, जिनमें प्रत्येक फ्लोट नंबर हैं। उदाहरण:

ColA ColB 
    11 22 
    33 44 
    55 66 

मैं कोशिश की है इस:

with open('mycsvfile.csv', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(('ColA', 'ColB')) 

मैं 'a' इस्तेमाल किया डेटा संलग्न करने के लिए है, लेकिन इस

11 22 
    33 44 
    55 66 

अब मैं की तरह दोनों कॉलम के लिए एक हैडर जोड़ना चाहते हैं पहली पंक्ति के बजाय फ़ाइल की निचली पंक्ति में मान जोड़ा गया। क्या मैं इसे ठीक कर सकता हूं?

+0

आप एक पूरा उदाहरण है कि यह दर्शाता है दिखाने की जरूरत है मुसीबत। –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/4454298/prepend-a-line-to-an-existing-file-in-python – abought

+0

मैंने पहले से ही यह जांच देखी है, लेकिन मुझे लगता है कि .csv फ़ाइल परिप्रेक्ष्य से अलग है । –

उत्तर

10

एक तरीका है सभी डेटा को पढ़ने के लिए, फिर शीर्षलेख के साथ फ़ाइल को ओवरराइट करें और फिर डेटा लिखें। यह एक बड़ा CSV फ़ाइल के साथ व्यावहारिक नहीं हो सकता है:

#!python3 
import csv 
with open('file.csv',newline='') as f: 
    r = csv.reader(f) 
    data = [line for line in r] 
with open('file.csv','w',newline='') as f: 
    w = csv.writer(f) 
    w.writerow(['ColA','ColB']) 
    w.writerows(data) 
+0

आपको बहुत बहुत धन्यवाद। मैं इस तरह कुछ ढूंढ रहा था। –

5

मुझे लगता है कि आपको सीएसवी फ़ाइल पढ़ने के लिए पांडा का उपयोग करना चाहिए, कॉलम हेडर/लेबल्स डालें और नई सीएसवी फ़ाइल को बाहर निकालें। मान लीजिए कि आपकी सीएसवी फाइल अल्पविराम से सीमित है। इस तरह कुछ काम करना चाहिए:

from pandas import read_csv 

    df = read_csv('test.csv') 
    df.columns = ['a', 'b'] 
    df.to_csv('test_2.csv') 
0

इस मामले में, आपको CSV मॉड्यूल की आवश्यकता नहीं है। के रूप में यह यथा-स्थान संपादन की अनुमति देता है आप fileinput मॉड्यूल की जरूरत है:

import fileinput 

for line in fileinput.input(files=['mycsvfile.csv'], inplace=True): 
    if fileinput.isfirstline(): 
     print 'ColA,ColB' 
    print line, 

उपरोक्त कोड में, print बयान inplace=True पैरामीटर की वजह से फाइल करने के लिए प्रिंट होगा।

-1

आप अपने मामले में की तरह सूची के रूप में अपने कोड में reader.fieldnames सेट कर सकते हैं

with open('mycsvfile.csv', 'a') as fd: 
     reader = csv.DictReader(fd) 
     reader.fieldnames = ["ColA" , "ColB"] 
     for row in fd 
संबंधित मुद्दे