【问题标题】:Replace certain element in only first line of the text file仅替换文本文件第一行中的某些元素
【发布时间】:2013-03-18 02:43:39
【问题描述】:

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

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

【问题讨论】:

  • 没有file.replace函数。到目前为止,您应该发布您尝试的代码,以便我们可以指出您的代码有什么问题。根据我迄今为止对您的问题的了解,我建议使用myFile = open('path/to/file'); firstLine = myFile.readline(); newFirstLine = firstLine.replace('oldValue', 'newValue'); rest = ''.join(myFile.readlines(); myFile.close(); myFile = open('path/to/file', 'w'); myFile.write(newFirstLine+rest); myFile.close()
  • @inspectorG4dget - 该评论的第二部分看起来像是对我的回答。
  • 非常感谢inspectorG4dget,您的回答似乎也正是我想要的。我试过后会告诉你的。
  • 感谢inspectorG4dget 和Rob 真的很好用。

标签: python file-io replace


【解决方案1】:

您只能读取整个文件,在第一行调用 .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))

如果它真的很大,你最好同时读取和写入行。

【讨论】:

  • Isaac 可能能够避免重写整个文件。详情见我的回答。
  • @StevenRumbalski 您的解决方案仅适用于长度相等的字符串,它们肯定不会出现在这里。
【解决方案2】:

只要你接受一些限制,你就可以破解这个。替换字符串的长度必须与原始字符串相同。如果替换字符串比原始字符串短,则用空格填充较短的字符串以使其长度相等(这仅在您的数据中可以接受额外空格时才有效)。如果替换字符串比原始字符串长,则无法就地替换,需要按照 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))

这对于任何长度的文件都会很快。

【讨论】:

  • 它必须是'r+' 而不是'rw'。除此之外谢谢!这对于较大的文件要好得多。
  • @skjerns 感谢您对文件模式的更正。
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2018-02-14
  • 2014-08-24
相关资源
最近更新 更多