从行中删除单词并使用 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"
$
我需要以下行: 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"
$