2013-02-09 37 views
12

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

csv.Error: sequence expected 

किसी को भी किसी भी विचार क्या मेरी कोड के साथ गलत है है? (फ़ाइल पहले प्रोग्राम में आयात की गई थी)।

import csv 
file = open('/home/btoms/Desktop/TomsBen/2000/01/01/20000101acme.mts', 'r') 

variables = [] 

file.readline() #Skip a line 
file.readline() 
file.readline() #Skip another line 

for line in file: 
    tmp = line.split() 
    tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 
    variables.append(tmp_STID) 
    variables.append(tmp_Times) 
    variables.append(tmp_T) 
    variables.append(tmp_RH) 


    if tmp_T < 6.2 and tmp_RH > 60.0: 
    dataCSV = open('ProgramCheck.csv', 'w') 
    writer = csv.writer(dataCSV, dialect='excel') 
    writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

    for values in variables: 
     writer.writerow(values) 
    else: 
      pass 
    file.close() 

त्रुटि के रूप में आता:

Traceback (most recent call last): 
     File "checkcsv.py", line 30, in <module> 
     writer.writerow(values) 
    _csv.Error: sequence expected 
+1

कृपया पूर्ण ट्रेसबैक के साथ पूर्ण त्रुटि संदेश पोस्ट करें। – BrenBarn

+1

'else: pass' आपके कोड में कुछ भी नहीं करता है। क्या आप इसका मतलब कुछ और करने के लिए किया था? –

+0

यह खुली फ़ाइल में वर्तमान लाइन को छोड़ना और अगली पंक्ति पर जाना है। मुझे लगता है कि यह अगला मुद्दा है जिसे मैं चलाने जा रहा था! –

उत्तर

2
अभी यह लगता है कि आप सिर्फ एक स्ट्रिंग लिखने की कोशिश कर रहे हैं

writer.writerow(variables) 

पूरी पंक्ति लिखेंगे

tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4])  
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 

चर सूची का निरीक्षण करें

[tmp_STID, tmp_T, tmp_RH, tmp_Time] 

ऐसा लगता है कि आप प्रत्येक पुनरावृत्ति के लिए एक नई सीएसवी फ़ाइल खोल रहे हैं? क्या वह लूप से बाहर होना चाहिए?

+0

इसके बारे में क्षमा करें - प्रोग्राम कोड को शामिल करने के लिए निश्चित करें मेरे कार्यक्रम का प्रारंभिक हिस्सा। आकस्मिक रूप से पहली बार उस प्रतिलिपि नहीं बनाई थी। –

+0

हां जो लूप से बाहर होना चाहिए ... इसके बारे में भी ध्यान देने के लिए बहुत बहुत धन्यवाद। –

+0

मैं एक ही पंक्ति में एसटीआईडी, टी, आरएच, और टाइम्स लिखने की कोशिश कर रहा हूं लेकिन सीएसवी फ़ाइल में अलग कॉलम लिख रहा हूं। क्या उस कोड के लिए काम नहीं करना चाहिए? –

14

writer.writerow एक पंक्ति में एक मान प्रति कॉलम के साथ, एक पंक्ति में लिखने के लिए अनुक्रमों की एक अनुक्रम (एक टुपल या सूची) की अपेक्षा करता है। इसके बदले आपने इसे एक ही मूल्य दिया है। आपका कोड वास्तव में अधिक तरह दिखना चाहिए:

writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH]) 

और यह मेरे लिए लग रहा है इस कोड के सबसे अधिक पसंद एक बड़ा पाश, जो एक बार स्टेशन प्रति (और प्रति पंक्ति एक बार इस प्रकार) चलाता है में होना चाहिए।


dataCSV = open('ProgramCheck.csv', 'w') 
writer = csv.writer(dataCSV, dialect='excel') 
writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

for line in inputData: 
    tmp = line.split() 

    tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 

    if tmp_T < 6.2 and tmp_RH > 60.0: 
     writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH]) 

file.close() 
+0

अहह्ह मैं देखता हूं !! यह बहुत अधिक समझ में आता है। पूरा 'लेखको' भाग मुझे फेंक रहा था कि मैं सीएसवी फ़ाइल खोलने का इंतजार कर रहा था और प्रति पंक्ति केवल एक डेटा सेट था। यह पूरी तरह से समझ में आता है। बहुत बहुत धन्यवाद। –

1

ठीक है, क्या अजगर की उम्मीद है जब आप "writeROW" विधि :) सिर्फ एक मूल्य में प्रवेश कर काम नहीं करेगा का उपयोग करने की कोशिश कर के बारे में सोचना, क्योंकि हर मूल्य एक अलग पंक्ति में हो जाएगा कोशिश , जो शायद आप ऐसा करने की कोशिश नहीं कर रहे हैं। इसके बजाय, आपको एक ही सेट में एक दूसरे से संबंधित सभी मूल्य मिल सकते हैं।

उदाहरण के लिए: 85% की आर्द्रता के साथ वाशिंगटन रेलवे स्टेशन पर 16:35 को तापमान 26 सी पर है। इसका प्रतिनिधित्व इस प्रकार किया जाएगा: ["वाशिंगटन", "16:35", 26, 85]।

+0

उस स्पष्टीकरण के लिए आपको बहुत बहुत धन्यवाद। मुझे कोई अन्य .write विधि नहीं मिल सका जो प्रति स्तंभ एक डेटा फ़ील्ड करेगा और कॉलम से कॉलम पर ले जाएगा। .writerow पर आपका स्पष्टीकरण इसे साफ़ करता है। मैं आपके सुझाए गए प्रारूप के साथ मान रहा हूं कि वास्तविक शब्दों और संख्याओं के बजाय, मैं संदर्भ चर का उपयोग करूंगा? –