2015-01-09 13 views
6

Dosya oluşturmaya çalışırken bu hatayı atıyorum. Oluşturulan bir .csv dosyası almak ve düz bir metin dosyasına koymak için tasarlanmıştır.IOError: [Errno 22] geçersiz kip ('w') veya dosya adı

Ben tarih ve zaman damgası ile çalıştırıldıktan sonra yeni bir dosya oluşturmak istiyorum ama dosyası oluşturmak için çalışırken ErrNo 22 almak gibi görünüyor.

Herhangi bir fikrin var mı?

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' gibi bir dize döndürür 03''. İşletim sisteminizin içinde kolon bulunan dosya isimlerine izin verdiğinden emin misiniz? Aynı şekilde,% x size ''01/09/15' 'kazandıracaktır. "15_12: 57: 03.txt" dosyanızın içereceği "Bursarcodes_01" ve "09" kurulumları var mı? – Kevin

+0

Bu tam olarak sorun oldu. Düzeltmeleri yaptıktan sonra bir cazibe gibi çalışır. – SergeProtector

cevap

6

Sen olamaz eğik çizgi (/) ve iki nokta üst üste (: fakat Unix izin verilir) dosya adına, ancak strftime kendi çıkışında üretir tam olarak ne olduğunu.

Python size yardım etmeye çalışır, diyor:

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

bununla time.strftime("%x") değiştirin:

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

Vay hızlı yanıt için teşekkürler ve harika çalışıyor! – SergeProtector

+1

@SergeProtector yardım ettiğine sevindim! –

1

Bir cleaned-: Bununla

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

... ve time.strftime("%X") yukarı ve genişletilmiş versiyon:

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:]) 

Artık hem komut satırından çalıştırabilirsiniz. csv dosyasında herhangi bir veri öğeleri tespit edilmeyen tek tırnak (') içeriyorsa geçersiz sql alacak

Not. 57:

+0

Vay şimdi bu etkileyici. Eğer kodumdan bir şey söyleyemediysen, kesinlikle Python'da yeni bir başlangıç ​​yaptığımı biliyorum. Yardımınız için bu sayede oynayacağım. – SergeProtector

İlgili konular