仅替换文本文件第一行中的某些元素

时间:2013-03-18 02:43:40

标签: python file-io replace

感谢您对我可能愚蠢的问题感兴趣。

我有一个文本文件,想要替换某些“NaN”元素。

我通常使用file.replace函数在整个文本文件中更改一定数量的NaN 现在,我想仅在文本文件的第一行而不是整个文本中用一定数量替换NaN 你能给我一个暗示这个问题吗?

2 个答案:

答案 0 :(得分: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))

如果它真的很大,你可能会更好地同时读取和写入行。

答案 1 :(得分:2)

如果你接受一些限制,你可以破解这个。替换字符串需要与原始字符串的长度相等。如果替换字符串比原始字符串短,则用空格填充较短的字符串以使其长度相等(这仅在数据中有额外空格可接受时才有效)。如果替换字符串比原始字符串长,则无法进行替换,需要遵循Harold的答案。

with open('your_file.txt', 'rw') 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))

这将在任何长度文件上快速。