使用python中的文件输入或正则表达式仅替换“文件中第二行中的最后一个单词”

时间:2013-03-26 11:37:25

标签: python regex file-io

说我的文件包含(只读):

           123.1.1.1      qwerty
          123.0.1.1      timmy
          (some text)

我想将timmy更改为新词,但我不应在代码中的任何位置使用“timmy”一词,因为用户可以随时更改它。

在python中是否可以“转到特定行并替换最后一个单词”?

4 个答案:

答案 0 :(得分:1)

通常,迭代文件的行是很好的,因此它也适用于大文件。

我的方法是

  1. 逐行阅读输入
  2. 拆分每一行
  3. 如果在第二行,则替换第二个字
  4. 再次加入部分
  5. 写入输出文件
  6. 我拆分每一行并再次加入它,以便在单词之间有哪些空格。如果您不关心它,请保持line不受影响,除非idx == 1。然后你也可以在第2行(break)之后idx==1循环。

    import shutil
    
    input_fn = "15636114/input.txt"
    output_fn = input_fn + ".tmp"
    
    replacement_text = "hey"
    
    with open(input_fn, "r") as f_in, open(output_fn, "w+") as f_out:
        for idx, line in enumerate(f_in):
            parts = line.split()
            if idx==1:
                parts[1] = replacement_text
            line = "    ".join(parts) + "\n"
            f_out.write(line)
    
    shutil.move(output_fn, input_fn)        
    

    我写入临时输出文件(为了在发生异常时保持输入文件不变),最后我用输出文件(shutil.move)覆盖输入文件。

答案 1 :(得分:0)

例如:

text = """123.1.1.1      qwerty
          123.0.1.1      timmy
          (some text)
"""

import re
print re.sub(r'^(.*\n.*)\b(\w+)', r'\1hey', text)

结果:

      123.1.1.1      qwerty
      123.0.1.1      hey
      (some text)

随意询问您是否需要解释。

答案 2 :(得分:0)

此功能将实现您想要实现的目标

def replace_word(filename, linenum, newword):
    with open(filename, 'r') as readfile:
        contents = readfile.readlines()

    contents[linenum] = re.sub(r"[^ ]\w*\n", newword + "\n", contents[linenum])

    with open(filename, 'w') as file:
        file.writelines(contents);

答案 3 :(得分:0)

不幸的是在python中你不能简单地更新文件而不重写它。您必须执行以下操作。

假设您有一个名为abcd.txt的文件,如下所示。

abcd.txt

123.1.1.1      qwerty
123.0.1.1      timmy

然后你可以做这样的事情。

 with open('abcd.txt', 'rw+') as new_file:
    old_lines = new_file.readlines() # Reads the lines from the files as a list
    new_file.seek(0) # Seeks back to index 0
    for line in old_lines:
        if old_lines.index(line) == 1: # Here we check if this is the second line
            line = line.split(' ')
            line[-1] = 'New Text' # replace the text
            line = ' '.join(line)
        new_file.write(line) # write to file