पायथन सीएसवी लाइन को लाइन से लिखते हैं


101

मेरे पास डेटा है जिसे http अनुरोध के माध्यम से एक्सेस किया जा रहा है और सर्वर द्वारा वापस अल्पविराम से अलग प्रारूप में भेजा गया है, मेरे पास निम्नलिखित कोड हैं:

site= 'www.example.com'
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text=str(soup)

पाठ की सामग्री इस प्रकार है:

april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9

मैं इस डेटा को CSV फ़ाइल में कैसे सहेज सकता हूं। मुझे पता है कि मैं लाइन से इटर्सेट लाइन पर निम्नलिखित की पंक्तियों के साथ कुछ कर सकता हूं:

import StringIO
s = StringIO.StringIO(text)
for line in s:

लेकिन मैं अनिश्चित हूं कि अब CSV को प्रत्येक पंक्ति को ठीक से कैसे लिखा जाए

EDIT ---> सुझाव के लिए धन्यवाद जैसा कि समाधान सरल था बल्कि नीचे देखा जा सकता है।

उपाय:

import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
    for line in s:
        f.write(line)

1
यह पहले से ही एक CSV है, आपको बस प्रत्येक पंक्ति को एक फ़ाइल में लिखना है ...
icedwater

1
मुझे यकीन नहीं है कि आपको StringIOईमानदार होने के लिए भी आयात की आवश्यकता होगी । इसके अलावा, समाधान के रूप में शायद लाइनों को अलग नहीं है, के रूप में f.write()स्वचालित रूप से newlines संलग्न नहीं है।
आइकेडवाटर

@ तैयार पानी मैं समझता हूं कि आपका क्या कहना है, लेकिन मैंने ऊपर दिए कोड को चलाया और यह डेटा को सीएसवी फ़ाइल में ठीक से संग्रहीत करने में सक्षम था।
सरसों टाइगर

जवाबों:


175

सामान्य तरीका:

##text=List of strings to be written to file
with open('csvfile.csv','wb') as file:
    for line in text:
        file.write(line)
        file.write('\n')

या

CSV लेखक का उपयोग करना:

import csv
with open(<path to output_csv>, "wb") as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in data:
            writer.writerow(line)

या

सबसे सरल तरीका:

f = open('csvfile.csv','w')
f.write('hi there\n') #Give your csv text here.
## Python will convert \n to os.linesep
f.close()

16
अजगर 3 के लिए, इसे बदल देंwith open(<path to output_csv>, "w", newline='') as csv_file:
खालिद हमीद

1
इस लाइन पर जानकारी गुम है for line in data:। कृपया इसे ठीक करें। धन्यवाद।
फ्रांसिस्को मारिया कैलिस्टो

@gsamaras यह विचार समुदाय की मदद करने के लिए था, इसके विपरीत आप संपादित करें और टिप्पणी करें जो बेकार हैं।
ऐनी मेनन

तीसरे समाधान का उपयोग करते हुए, अगर कोई सीवीएस-फाइल में पहले से ही कुछ है, तो एक पंक्ति को कैसे जोड़ा जाए?
जुर्गन के।

3
@ JürgenK। (लिखने की विधि) के 'a'स्थान पर (एपेंड मोड) का उपयोग करें 'w'
ऐनी मेनन

15

आप फ़ाइल को केवल उसी तरह लिख सकते हैं जब आप कोई सामान्य फ़ाइल लिखेंगे।

with open('csvfile.csv','wb') as file:
    for l in text:
        file.write(l)
        file.write('\n')

यदि केवल मामले में, यह सूचियों की एक सूची है, तो आप सीधे अंतर्निहित csvमॉड्यूल का उपयोग कर सकते हैं

import csv

with open("csvfile.csv", "wb") as file:
    writer = csv.writer(file)
    writer.writerows(text)

8

मैं बस एक फ़ाइल के लिए प्रत्येक पंक्ति लिखूंगा, क्योंकि यह पहले से ही एक सीएसवी प्रारूप में है:

write_file = "output.csv"
with open(write_file, "w") as output:
    for line in text:
        output.write(line + '\n')

मुझे याद नहीं है कि इस समय लाइन-ब्रेक के साथ लाइनों को कैसे लिखना है, हालांकि: पी

इसके अलावा, आप पर एक नज़र लेने के लिए पसंद कर सकते हैं इस उत्तर के बारे में write(), writelines()और '\n'


4

पिछले उत्तरों के पूरक के लिए, मैंने CSV फ़ाइलों को लिखने के लिए एक त्वरित वर्ग को मार दिया। यदि आप कई फ़ाइलों से निपटना चाहते हैं, तो खुली फाइलों को प्रबंधित करना और बंद करना और स्थिरता और क्लीनर कोड प्राप्त करना आसान बनाता है।

class CSVWriter():

    filename = None
    fp = None
    writer = None

    def __init__(self, filename):
        self.filename = filename
        self.fp = open(self.filename, 'w', encoding='utf8')
        self.writer = csv.writer(self.fp, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL, lineterminator='\n')

    def close(self):
        self.fp.close()

    def write(self, elems):
        self.writer.writerow(elems)

    def size(self):
        return os.path.getsize(self.filename)

    def fname(self):
        return self.filename

उदाहरण का उपयोग:

mycsv = CSVWriter('/tmp/test.csv')
mycsv.write((12,'green','apples'))
mycsv.write((7,'yellow','bananas'))
mycsv.close()
print("Written %d bytes to %s" % (mycsv.size(), mycsv.fname()))

मज़े करो


1

इस बारे में क्या:

with open("your_csv_file.csv", "w") as f:
    f.write("\n".join(text))

str.join () एक स्ट्रिंग लौटाएं जो पुनरावृति में तारों का संघात है। तत्वों के बीच विभाजक इस विधि को प्रदान करने वाला स्ट्रिंग है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.