我有一个我需要操作的文本文件。我希望在出现单词" exactarch"后添加一行。意味着每当" exactarch"发生了,我想在下一行添加文字。
E.g。如果这是原始文件内容,
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
gpgcheck=1
plugins=1
我想将其更改如下:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
这就是我试图做的事情:
with open('file1.txt') as f:
for line in input_data:
if line.strip() == 'exactarch':
f.write('obsoletes=1')
显然这不起作用,因为我无法弄清楚如何计算和写入这一行。
答案 0 :(得分:4)
您要求使用Python解决方案。但是使用更简单的工具可以解决这样的任务。
如果您使用的系统有sed
,则可以使用simle one-liner执行此操作:
$ sed '/exactarch/aobsoletes=1' < in.txt
这是什么意思?
sed
:可执行文件/exactarch/
:匹配包含exactarch
a
:在当前行之后,追加一个带有以下文字的新行obsoletes=1
:要添加到新行中的文字输出:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
修改强>
要修改文件,请使用选项-i
并将文件作为参数:
$ sed -i '/exactarch/aobsoletes=1' in.txt
答案 1 :(得分:2)
The past说这很简单 - 替换文件中的单词并不是什么新鲜事。
如果要替换单词,可以使用在那里实现的解决方案。在您的背景下:
import fileinput
for line in fileinput.input(fileToSearch, inplace=True):
print(line.replace("exactarch", "exactarch\nobsoletes=1"), end='')
答案 2 :(得分:2)
简单 - 读取所有行,找到正确的行并在找到后插入所需的行。将结果行转储到文件。
<script>
myapp.controller( "subCtrl" , ["$scope",function($scope){
alert("subCtrl created");
}]);
</script>
<div ng-controller="subCtrl">
sub.html loaded.
</div>
答案 3 :(得分:0)
我犹豫是否使用fileinput,b / c如果在“分析”阶段出现问题,您将在失败前的任何情况下留下文件。我会阅读所有内容,然后全力以赴。下面的代码确保:
希望这会有所帮助,尽管不像一两个班轮一样时尚。
with open('test.txt') as f:
data = f.readlines()
insertValue = 'obsoletes=1'
for item in data:
if item.rstrip() == 'exactarch=1': #find it if it's in the middle or the last line (ie. no '\n')
point = data.index(item)
if point+1 == len(data): #Will be inserted as new line since current exactarch=1 is in last position, so you don't want the '\n', right?
data.insert(point+1, instertValue)
else:
if data[point + 1].rstrip() != insertValue: #make sure the value isn't already below exactarch=1
data.insert(point+1, insertValue + '\n')
print('insertValue added below "exactarch=1"')
else:
print('insertValue already exists below exactarch=1')
with open('test.txt','w') as f:
f.writelines(data)