Csvwriter.writerow () प्रत्येक वर्ण के बाद अल्पविराम क्यों लगाता है?


97

यह कोड url को खोलता है और /namesअंत में जोड़ता है और पेज को खोलता है और स्ट्रिंग को प्रिंट करता है test1.csv:

import urllib2
import re
import csv

url = ("http://www.example.com")
bios = [u'/name1', u'/name2', u'/name3']
csvwriter = csv.writer(open("/test1.csv", "a"))

for l in bios:
    OpenThisLink = url + l
    response = urllib2.urlopen(OpenThisLink)
    html = response.read()
    item = re.search('(JD)(.*?)(\d+)', html)
    if item:
        JD = item.group()
        csvwriter.writerow(JD)
    else:
        NoJD = "NoJD"
        csvwriter.writerow(NoJD)

लेकिन मुझे यह परिणाम मिलता है:

J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....

अगर मैं स्ट्रिंग को ("जेडी", "कोलंबिया लॉ स्कूल" ....) में बदलता हूं तो मुझे मिलता है

JD, Columbia Law School...)

मैं दस्तावेज में नहीं पाया कि कैसे परिधि निर्दिष्ट करें।

अगर मैं उपयोग करने की कोशिश करता हूं तो मुझे delimenterयह त्रुटि मिलती है:

TypeError: 'delimeter' is an invalid keyword argument for this function

सहायता के लिए धन्यवाद।


8
यह है delimiterऔर नहीं delimeter: docs.python.org/library/csv.html
जॉन पॉलेट

यदि आपको राइटर के साथ यह समस्या हो रही है। राइटर एस करें , तो इसे सूचियों की सूची दें, न कि स्ट्रिंग्स की सूची।
नौमेनन

जवाबों:


148

यह स्ट्रिंग्स के एक अनुक्रम (जैसे: एक सूची या टुपल) की अपेक्षा करता है। आप इसे एक ही तार दे रहे हैं। एक स्ट्रिंग तार का एक अनुक्रम भी होता है, लेकिन यह 1 चरित्र तार का एक क्रम है, जो कि आप नहीं चाहते हैं।

यदि आप प्रति पंक्ति केवल एक स्ट्रिंग चाहते हैं तो आप कुछ ऐसा कर सकते हैं:

csvwriter.writerow([JD])

यह एक सूची के साथ जेडी (एक स्ट्रिंग) को लपेटता है।


धन्यवाद! इसने इसे ठीक कर दिया। मैं अन्य उत्तरों की भी कोशिश करूँगा। मैंने एक खाली सूची JDList = [] भी बनाई और उसमें जद को जोड़ा, वह भी काम करता है लेकिन यह सरल है।
Zeynel

1
अब यह स्ट्रिंग के उद्धरण चिह्नों को भी लिखता है। क्या इसके आसपास कोई रास्ता है?
CGFoX

@CGFoX क्या आप ऐसे उदाहरण कोड पोस्ट कर सकते हैं जो इसे प्रदर्शित करता है?
लॉरेंस गोंसाल्वेस

writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])दिनांक के रूप में लिखते हैं"2016-11-05 20:30:19"
CGFoX

@CGFoX मैं उस व्यवहार को पुन: पेश नहीं कर सकता। मैं 2016-11-05 13:21:11बिना उद्धरण के मिलता हूं । आप पायथन के किस संस्करण का उपयोग कर रहे हैं?
लॉरेंस गोंसाल्वेस

5

Csv.writer वर्ग लेखक के तर्क के रूप में एक पुनरावृत्ति लेता है; जैसा कि पायथन में तार चरित्र द्वारा पुनरावृत्त हैं, वे लेखक के लिए एक स्वीकार्य तर्क हैं, लेकिन आपको उपरोक्त आउटपुट मिलता है।

इसे ठीक करने के लिए, आप व्हॉट्सएप के आधार पर मूल्य को विभाजित कर सकते हैं (मैं मान रहा हूं कि आप क्या चाहते हैं)

csvwriter.writerow(JD.split())

1

ऐसा तब होता है, क्योंकि जब एक मैचऑब्जेक्ट उदाहरण का समूह () विधि केवल एक ही मान लौटाता है, तो वह इसे एक स्ट्रिंग के रूप में लौटाता है। जब कई मूल्य होते हैं, तो उन्हें तार के टपल के रूप में लौटा दिया जाता है।

यदि आप एक पंक्ति लिख रहे हैं, तो मुझे लगता है, csv.writer उस ऑब्जेक्ट पर पुनरावृत्त करता है जो आप इसे पास करते हैं। यदि आप एक एकल स्ट्रिंग (जो एक चलने-फिरने योग्य है) पास करते हैं, तो यह उसके पात्रों पर निर्भर करता है, जिसके परिणामस्वरूप आप देख रहे हैं। यदि आप तार के एक गुच्छे को पास करते हैं, तो इसे एक वास्तविक स्ट्रिंग मिलती है, प्रत्येक पुनरावृत्ति पर एक भी वर्ण नहीं।

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