एक csv फ़ाइल के लिए सूचियों की पायथन सूची लिखना


168

मेरे पास निम्नलिखित फॉर्म की सूचियों की एक लंबी सूची है ---

a = [[1.2,'abc',3],[1.2,'werew',4],........,[1.4,'qew',2]]

यानी सूची में मान अलग-अलग प्रकार के होते हैं - फ्लोट, इंट, स्ट्रिंग्स। मैं इसे सीएसवी फाइल में कैसे लिखूं ताकि मेरा आउटपुट सीएसवी फाइल जैसा दिखे

1.2,abc,3
1.2,werew,4
.
.
.
1.4,qew,2

जवाबों:


299

पायथन का निर्मित सीएसवी मॉड्यूल इसे आसानी से संभाल सकता है:

import csv

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(a)

यह मान लेता है कि आपकी सूची को इस रूप में परिभाषित किया गया है a, जैसा कि यह आपके प्रश्न में है। आप csv.writer()उपरोक्त लिंक किए गए पुस्तकालय संदर्भ पृष्ठ में दस्तावेज के अनुसार विभिन्न वैकल्पिक मापदंडों के माध्यम से आउटपुट सीएसवी के सटीक प्रारूप को बदल सकते हैं ।

पायथन 3 के लिए अपडेट

import csv

with open("out.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(a)

88
पायथन 3 संगतता के लिए, "बी" को "डब्ल्यूबी" से हटा दें।
व्लादिमीर वी

28
पायथन 3 के साथ - खुला ('output.csv', 'w', newline = '')। अगर मुझे न्यूलाइन पैरामीटर को छोड़ दिया जाए तो मुझे एक अतिरिक्त लाइन मिलती है। docs.python.org/3/library/csv.html#csv.writer
स्पा

1
Python3 में मुझे खुले ('output.csv', 'w', newline = "") का उपयोग करना था
टिम मोटराम

1
वाह कि अजगर 3 त्रुटि बहुत ही बेकार है। धन्यवाद @vladV (एक बाइट्स जैसी वस्तु की आवश्यकता है, न कि 'str')। यह थोड़े को समझ में आता है, लेकिन इस बात की जानकारी नहीं है कि सभी को कहां देखना है।
रामबेटिनो

1
@tlalco का मतलब है कि शायद आप पायथन 2 का उपयोग कर रहे हैं, इस स्थिति में आपको दूसरे के बजाय पहले कोड ब्लॉक का उपयोग करना चाहिए। (इसका मतलब यह भी है कि आपको पायथन 3 पर स्विच करने पर विचार करना चाहिए)
एम्बर

35

आप उपयोग कर सकते हैं pandas:

In [1]: import pandas as pd

In [2]: a = [[1.2,'abc',3],[1.2,'werew',4],[1.4,'qew',2]]

In [3]: my_df = pd.DataFrame(a)

In [4]: my_df.to_csv('my_csv.csv', index=False, header=False)

मुझे नहीं लगता कि pandasअगर पुस्तकालय का निर्माण किया csvजा सकता है तो इसका उपयोग करना चाहिए।
सिमिन जी

6
मुझे पांडा पसंद हैं क्योंकि इसके शक्तिशाली
dorbodwolf

9
पांडा शक्तिशाली है, निश्चित है, लेकिन मैं अगले दरवाजे के कोने की दुकान में जाने के लिए मैकलेरन का उपयोग नहीं करने जा रहा हूं।
एमआई राइट

30
import csv
with open(file_path, 'a') as outcsv:   
    #configure writer to write standard csv file
    writer = csv.writer(outcsv, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
    writer.writerow(['number', 'text', 'number'])
    for item in list:
        #Write item to outcsv
        writer.writerow([item[0], item[1], item[2]])

आधिकारिक डॉक्स: http://docs.python.org/2/library/csv.html


1
यदि आप कुछ टिप्पणियों के साथ अपना उत्तर बता सकते हैं तो यह मेरा +1 मिलेगा।
बुरहान खालिद

3
writerowएकाधिक तर्क नहीं लेता है।
अंबर

1
>>> w.writerow ("a", "b", "c") Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, में <मॉड्यूल> TypeError: authorow () बिल्कुल सही तर्क लेता है (३ दिया)
अंबर

@ आप अजगर के किस संस्करण का उपयोग करते हैं?
दिमित्री ज़गोरुलकिन

4
@ मुझे क्षमा करें। मुझे याद आया []
दिमित्री ज़गोरुलकिन

11

जो भी कारण के लिए आप (जैसे एक मॉड्यूल का उपयोग किए बिना इसे मैन्युअल रूप से करना चाहता था तो csv, pandas, numpyआदि):

with open('myfile.csv','w') as f:
    for sublist in mylist:
        for item in sublist:
            f.write(item + ',')
        f.write('\n')

बेशक, अपने स्वयं के संस्करण को रोल करना त्रुटि-प्रवण और अक्षम हो सकता है ... यही कारण है कि आमतौर पर इसके लिए एक मॉड्यूल है। लेकिन कभी-कभी अपना खुद का लेखन आपको यह समझने में मदद कर सकता है कि वे कैसे काम करते हैं, और कभी-कभी यह सिर्फ आसान होता है।


11

मेरी बहुत बड़ी सूची में csv.writer का उपयोग करने में काफी समय लगा। मैंने पंडों का उपयोग करने का फैसला किया, इसे नियंत्रित करना और समझना आसान और तेज था:

 import pandas

 yourlist = [[...],...,[...]]
 pd = pandas.DataFrame(yourlist)
 pd.to_csv("mylist.csv")

एक बेहतर सीएसवी फ़ाइल बनाने के लिए आप कुछ हिस्सा बदल सकते हैं:

 yourlist = [[...],...,[...]]
 columns = ["abcd","bcde","cdef"] #a csv with 3 columns
 index = [i[0] for i in yourlist] #first element of every list in yourlist
 not_index_list = [i[1:] for i in yourlist]
 pd = pandas.DataFrame(not_index_list, columns = columns, index = index)

 #Now you have a csv with columns and index:
 pd.to_csv("mylist.csv")

5

अंबरीज़ समाधान भी खस्ता सरणियों के लिए अच्छी तरह से काम करता है:

from pylab import *
import csv

array_=arange(0,10,1)
list_=[array_,array_*2,array_*3]
with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(list_)

4

यदि आप उसके लिए csvमॉड्यूल आयात नहीं करना चाहते हैं , तो आप केवल Python बिल्ट-इन का उपयोग करके csv फ़ाइल में सूचियों की सूची लिख सकते हैं

with open("output.csv", "w") as f:
    for row in a:
        f.write("%s\n" % ','.join(str(col) for col in row))

3

lineterinator='\n'लेखक बनाते समय इंगित करना सुनिश्चित करें ; अन्यथा, एक अतिरिक्त खाली लाइन प्रत्येक डेटा लाइन के बाद फ़ाइल में लिखी जा सकती है जब डेटा स्रोत अन्य सीएसवी फ़ाइल से होते हैं ...

यहाँ मेरा समाधान है:

with open('csvfile', 'a') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter='    ',quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
for i in range(0, len(data)):
    spamwriter.writerow(data[i])

3

अचार में सूची की सूची को डंप करने और इसे अचार मॉड्यूल के साथ पुनर्स्थापित करने के बारे में कैसे ? यह काफी सुविधाजनक है।

>>> import pickle
>>> 
>>> mylist = [1, 'foo', 'bar', {1, 2, 3}, [ [1,4,2,6], [3,6,0,10]]]
>>> with open('mylist', 'wb') as f:
...     pickle.dump(mylist, f) 


>>> with open('mylist', 'rb') as f:
...      mylist = pickle.load(f)
>>> mylist
[1, 'foo', 'bar', {1, 2, 3}, [[1, 4, 2, 6], [3, 6, 0, 10]]]
>>> 

0

जब एक साथ उदाहरण निम्नलिखित मैं एक त्रुटि संदेश मिला न्यू लाइन csv.writer समारोह में पैरामीटर। निम्नलिखित कोड ने मेरे लिए काम किया।

 with open(strFileName, "w") as f:
    writer = csv.writer(f, delimiter=',',  quoting=csv.QUOTE_MINIMAL)
    writer.writerows(result)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.