テキストファイルがあり、「NaN」である特定の要素を置き換えたいと思います。
私は通常file.replace
、テキストファイル全体を通して特定の数のNaNを変更するための関数を使用しました。
ここで、テキスト全体ではなく、テキストファイルの最初の行のみでNaNを特定の番号に置き換えたいと思います。
この問題のヒントを教えてください。
ファイル全体を読み取ることしかできず、最初の行に対して.replace()を呼び出して、それを新しいファイルに書き込むことができます。
with open('in.txt') as fin:
lines = fin.readlines()
lines[0] = lines[0].replace('old_value', 'new_value')
with open('out.txt', 'w') as fout:
for line in lines:
fout.write(line)
ファイルがそれほど大きくない場合は、.join()だけを使用できます。
with open('out.txt', 'w') as fout:
fout.write(''.join(lines))
そして、それが本当に大きい場合は、行の読み取りと書き込みを同時に行う方がよいでしょう。
いくつかの制約を受け入れれば、これをハックできます。置換文字列は、元の文字列と同じ長さである必要があります。置換文字列が元の文字列よりも短い場合は、短い文字列にスペースを埋めて同じ長さにします(これは、データ内の余分なスペースが許容できる場合にのみ機能します)。交換用の弦が元の弦よりも長い場合、その場で交換を行うことはできず、ハロルドの答えに従う必要があります。
with open('your_file.txt', 'r+') as f:
line = next(f) # grab first line
old = 'NaN'
new = '0 ' # padded with spaces to make same length as old
f.seek(0) # move file pointer to beginning of file
f.write(line.replace(old, new))
これは、どの長さのファイルでも高速になります。