2015-01-09 7 views
6

私は、ファイルを作成しようとしたときにスローされる、このエラーを取得しています。作成された.csvファイルをプレーンテキストファイルに格納するように設計されています。例外IOError:[errnoを22]無効なモード(「W」)またはファイル名

私はそれが日付とタイムスタンプを使用して実行された後に、それは新しいファイルを作成したいと思いますが、私は、ファイルを生成しようとしたときにerrno 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''。お使いのOSがコロンを持つファイル名を許可していますか?同様に、%xは ''01/09/15 ''を取得します。 "15_12:57:03.txt"ファイルを含むディレクトリ "Bursarcodes_01"と "09"が既に設定されていますか? – Kevin

+0

これはまさに問題でした。訂正をした後、それは魅力的に機能します。 – SergeProtector

答えて

6

あなたのファイル名にスラッシュ(/)とコロン(:が、Unixのでは許可)を持つことはできませんが、彼らはstrftimeは、その出力に生成し、まさにです。

Pythonはあなたを助けるためにしようと、それは言う:

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

これでtime.strftime("%x")を置き換えます

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

素早く反応してくれてありがとうございました。 – SergeProtector

+1

@SergeProtectorが役に立ってうれしいです! –

1

cleaned-:これで

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

...とtime.strftime("%X")を拡張バージョン:

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

あなたは今だけでなく、コマンドラインから実行することができます。 CSVファイル内のすべてのデータ項目は、エスケープ単一引用符(')を含有する場合は、無効なSQLを取得すること

は注意してください。

+0

これはすごく印象的です。私のコードから分からない場合は、私がPythonで完全な初心者であることを確かめてください。私はあなたの助けにこのおかげで遊びます。 – SergeProtector

関連する問題