2011-07-13 10 views
47

バッファこのコードは、次のエラーメッセージを返し(=、INFILE、モード= 'R' 緩衝-1)オープンとTypeError例外:Unicodeに強制変換:必要文字列または

  • をin_f、オープン(OUTFILEとして、モード= 'W'、バッファリング= -1)out_fとして: はTypeError:Unicodeに強制変換:必要文字列またはバッファ、ファイルが

    # Opens each file to read/modify 
    infile=open('110331_HS1A_1_rtTA.result','r') 
    outfile=open('2.txt','w') 
    
    import re 
    
    with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f: 
        f = (i for i in in_f if i.rstrip()) 
        for line in f: 
         _, k = line.split('\t',1) 
         x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k) 
         if not x: 
          continue 
         out_f.write(' '.join(x[0]) + '\n') 
    

を見つけた誰かが私を助けてください。

答えて

53

各ファイルを2回開いてみようとしています。

infile=open('110331_HS1A_1_rtTA.result','r') 

をして、あなたは再びopen関数に(ファイルオブジェクトがある)infileを渡します:まず、あなたは

with open (infile, mode='r', buffering=-1) 

openはファイル名であることを最初の引数を期待し、もちろんです、開いているファイルではありません!

ファイルを1回だけ開くと正常に動作します。

+0

とても素晴らしいです。ありがとう! –

8

ファイルオブジェクトをファイル名として渡そうとしています。お試しください。

infile = '110331_HS1A_1_rtTA.result' 
outfile = '2.txt' 

コードの先頭に

(だけでなく、再度ファイルを開こうとすると、その問題の原因open()の倍増使用量は、それはまた、彼らはおそらくプログラムいったん閉じますでしょうけれどもinfileoutfileは、実行の途中で閉じられることはありませんしていることを意味しません終了)。

5

問題のコードだけではなく、これはGoogleのこの一般的なエラーメッセージの最初の結果の1つです。このエラーは、引数なしで特定のosコマンドを実行している場合にも発生します。

os.path.exists(arg) 
os.stat(arg) 

argがNoneの場合にこの例外が発生します。

+0

ありがとうございます。そのpythonのエラーコードは本当に間違いです。 – mjuarez

関連する問題