2

テキストファイルがあり、「NaN」である特定の要素を置き換えたいと思います。

私は通常file.replace、テキストファイル全体を通して特定の数のNaNを変更するための関数を使用しました。
ここで、テキスト全体ではなく、テキストファイルの最初の行のみでNaNを特定の番号に置き換えたいと思います。
この問題のヒントを教えてください。

4

2 に答える 2

5

ファイル全体を読み取ることしかできず、最初の行に対して.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))

そして、それが本当に大きい場合は、行の読み取りと書き込みを同時に行う方がよいでしょう。

于 2013-03-18T03:11:11.460 に答える
3

いくつかの制約を受け入れれば、これをハックできます。置換文字列は、元の文字列と同じ長さである必要があります。置換文字列が元の文字列よりも短い場合は、短い文字列にスペースを埋めて同じ長さにします(これは、データ内の余分なスペースが許容できる場合にのみ機能します)。交換用の弦が元の弦よりも長い場合、その場で交換を行うことはできず、ハロルドの答えに従う必要があります。

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

これは、どの長さのファイルでも高速になります。

于 2013-03-18T03:24:04.400 に答える