从行中删除单词并使用 python 将行保存在文件中

Delete words from line and save the line in file with python

我需要以下行: test_list="root/abc_test.list someText tests/long_test.list someText tests/h2.list"

将更改为:

test_list="tests/My_test.list" 

** .list 可能出现在行中的任何位置。

实际上需要做的是找到每个有 ".list 的单词,如果它是 long_test.list 将其更改为 My_test.list ,并且在它更改之后,然后删除所有其他子字符串包含 ".list" 接受已更改的那个。

为了解决这个问题,我将单词 long_test.list 更改为 xXxXxX,然后删除了所有 .list 单词,然后将 xXxXxX 更改回 My_test.list 。 为此,我使用了以下代码:

  with in_place.InPlace('RUN_NEW') as file:
      for line in file:
          line = line.replace('long_test_list', 'xXxXxX')
          file.write(line)
      file.close()

  with open("RUN_NEW","r+") as f:
      new_f = f.readlines()
      f.seek(0)
      for line in new_f:
          line = str(line).split(' ')
          print(line)
          print(len(line))
          for word in line:
              if ".list" not in word:
                  f.write(word)
      f.close()

   with open("file.txt","r+") as f:
      new_f = f.readlines()
      f.seek(0)
      for line in new_f:
          line = str(line).split(' ')

          for k in line:
               if ".list" not in k:
                  s=' '
                  print(s.join(k.split('"')))
                  #f.write(s.join(k.split('"')))

上面代码的问题是,用 (' ') 分割后的行看起来像 ['set', 'test_list="tests/long_test.list', 'tests/h2.list"'], 当我试图加入它时,它会在每个不包含 .list 的子字符串之后用 "\n" 保存它。我在考虑正则表达式,但这只会删除 .list 本身,所有 substring 。 而且我想保存引号而不在拆分过程中删除它们。

这个小脚本演示了如何在一行中进行替换。使用 re.sub 查看读入的行(此处模拟)并查找双引号后跟以 space 结尾的任意数量字符的可选组(如果目标路径位于字符串的开头)后跟捕获的任意数量的字符组,后跟目标文字字符串 "long_test.list" 后跟任意数量的以双引号结尾的字符。如果找到,则用双引号替换整个匹配项,后跟第二个捕获组,然后是文字 "My_test.list",然后是结束双引号。如果未找到匹配项,则将返回读入的整行。

#!/usr/bin/env python

import re

line = 'test_list="root/abc_test.list someText tests/long_test.list someText tests/h2.list"'

print(line)

line = re.sub(r'"(.* )?(.*)long_test.list.*"', r'"My_test.list"', line)

print(line)

$ ./test.py
test_list="root/abc_test.list someText tests/long_test.list someText tests/h2.list"
test_list="tests/My_test.list"
$