このコードは、次のエラーメッセージを返します。
in_fとしてopen(infile、mode = 'r'、buffering = -1)、out_fとしてopen(outfile、mode = 'w'、buffering = -1):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')
誰か助けてください。
各ファイルを2回開こうとしています!最初に:
infile=open('110331_HS1A_1_rtTA.result','r')
次に、infile
(ファイルオブジェクト)をopen
関数に再度渡します。
with open (infile, mode='r', buffering=-1)
open
はもちろん、最初の引数が開かれたファイルではなくファイル名であることを期待しています!
ファイルを一度だけ開くと、問題ないはずです。
それほど具体的ではない場合(質問のコードだけでなく、これはこの一般的なエラーメッセージのGoogleでの最初の結果の1つです。このエラーは、引数なしで特定のosコマンドを実行する場合にも発生します。
例えば:
os.path.exists(arg)
os.stat(arg)
ArgがNoneの場合、この例外が発生します。
ファイルオブジェクトをファイル名として渡そうとしています。使用してみてください
infile = '110331_HS1A_1_rtTA.result'
outfile = '2.txt'
コードの先頭に。
(open()
を2倍に使用すると、ファイルを再度開こうとすると問題が発生するだけでなく、実行中にinfile
およびoutfile
が閉じられないことも意味します。 'おそらくプログラムが終了すると閉じられます。)
Python 2で見つけた最良の方法は次のとおりです。
def inplace_change(file,old,new):
fin = open(file, "rt")
data = fin.read()
data = data.replace(old, new)
fin.close()
fin = open(file, "wt")
fin.write(data)
fin.close()
例:
inplace_change('/var/www/html/info.txt','youtub','youtube')