我有一个文本文件,想替换某些“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))
如果它真的很大,你可能最好同时读取和写入行。
只要您接受一些限制,您就可以破解它。替换字符串的长度必须与原始字符串相同。如果替换字符串比原始字符串短,则用空格填充较短的字符串以使其长度相等(这仅在您的数据中可以接受额外空格时才有效)。如果替换字符串比原始字符串长,则无法就地替换,需要遵循 Harold 的回答。
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))
这在任何长度的文件上都会很快。