2015-01-09 6 views
6

मुझे फ़ाइल बनाने का प्रयास करते समय यह त्रुटि फेंक रही है। इसे एक .csv फ़ाइल बनाने और इसे एक सादा पाठ फ़ाइल में डालने के लिए डिज़ाइन किया जा रहा है।IOError: [Errno 22] अमान्य मोड ('w') या फ़ाइल नाम

मैं इसे दिनांक और समय टिकट के साथ चलाने के बाद एक नई फ़ाइल बनाना चाहता हूं लेकिन फ़ाइल उत्पन्न करने का प्रयास करते समय मुझे एरर्नो 22 मिलना प्रतीत होता है।

कोई विचार?

import csv 
import time 

f = open(raw_input('Enter file name: '),"r") 

saveFile = open ('Bursarcodes_'+time.strftime("%x")+ '_'+time.strftime("%X")+ 
       '.txt', 'w+') 

csv_f = csv.reader(f) 

for row in csv_f: 
    saveFile.write('insert into bursarcode_lookup(bursarcode, note_id)' + 
        ' values (\'' + row[0] + '\', ' + row[1] + ')\n') 

f.close() 

saveFile.close() 
+3

'time.strftime ("% X ")' '12: 57: 03'' जैसी स्ट्रिंग देता है। क्या आप सुनिश्चित हैं कि आपका ओएस उन फाइलनामों को अनुमति देता है जिनमें उनमें एक कोलन है? इसी तरह,% x आपको '01/09/15'' 'मिलेगा। क्या आपके पास "Bursarcodes_01" और "09" पहले से सेट की गई निर्देशिकाएं हैं, जिनमें आपकी "15_12: 57: 03.txt" फ़ाइल होगी? – Kevin

+0

यह वास्तव में समस्या थी। सुधार करने के बाद यह एक आकर्षण की तरह काम करता है। त्वरित प्रतिक्रिया के लिए – SergeProtector

उत्तर

6

आप नहीं हो सकता स्लैश (/) और कोलन (:, लेकिन यूनिक्स में अनुमति) अपने फ़ाइल का नाम है, लेकिन वे कर रहे हैं कि वास्तव में क्या strftime इसके उत्पादन में उत्पन्न करता है।

अजगर मदद करने के लिए कोशिश करता है, यह कहते हैं:

No such file or directory: 'Bursarcodes_01/09/15_19:59:24.txt' 

इस के साथ बदलें time.strftime("%x"):

time.strftime("%x").replace('/', '.') 

... और time.strftime("%X") इस के साथ:

time.strftime("%X").replace(':', '_') 
+1

वाह धन्यवाद और यह बहुत अच्छा काम करता है! – SergeProtector

+1

@ सर्जप्रोटेक्टर खुश होने में मदद मिली! –

1

एक cleaned- ऊपर और विस्तारित संस्करण:

import csv 
import sys 
import time 

def make_output_fname(): 
    # Thanks to @Andrew: 
    return time.strftime("Bursarcodes_%x_%X.txt").replace("/", "-").replace(":", "-") 

def main(csv_fname=None, outfname=None, *args): 
    if not csv_fname: 
     # first arg not given - prompt for filename 
     csv_fname = raw_input("Enter .csv file name: ") 

    if not outfname: 
     # second arg not given - use serialized filename 
     outfname = make_output_fname() 

    with open(csv_fname) as inf, open(outfname, "w") as outf: 
     incsv = csv.reader(inf) 
     for row in incsv: 
      outf.write(
       "insert into bursarcode_lookup(bursarcode, note_id) values ('{0}', '{1}')\n" 
       .format(*row) 
      ) 

if __name__=="__main__": 
    # pass any command-line arguments to main() 
    main(*sys.argv[1:]) 

अब आप इसे कमांड लाइन से भी चला सकते हैं।

ध्यान दें कि यदि आपके सीएसवी फ़ाइल में किसी भी डेटा आइटम में अनचाहे एकल-कोट्स (') शामिल हैं तो आपको अमान्य एसक्यूएल मिलेगा।

+0

वाह अब यह प्रभावशाली है। अगर आप मेरे कोड से नहीं बता सकते हैं, तो निश्चित रूप से अब पता है कि मैं पाइथन में एक पूर्ण शुरुआत कर रहा हूं। मैं आपकी मदद के लिए इस धन्यवाद के साथ खेलूँगा। – SergeProtector

संबंधित मुद्दे