[英]replacing a string in a text file
我寫了一個腳本,它將打開我的文本文件以搜索某個單詞,然后選擇包含該單詞的行並將其分成三部分,然后選擇數字部分並將其加1,因此每次運行腳本一個被添加到該編號。 這是腳本:
#!/usr/bin/env python
inputFile = open('CMakeLists.txt', 'r')
version = None
saved = ""
for line in inputFile:
if "_PATCH " in line:
print "inside: ", line
version = line
else:
saved += line
inputFile.close()
inputFile = open('CMakeLists.txt', 'w')
x = version.split('"')
print "x: ", x
a = x[0]
b = int(x[1]) + 1
c = x[2]
new_version = str(a) + '"' + str(b) + '"' + str(c)
print "new_version: ", new_version
inputFile.write(str(saved))
inputFile.write(str(new_version))
inputFile.close()
但是我的問題是新編號正在文件的末尾寫入,我希望它保留在其原始位置。 有任何想法嗎 ?
謝謝
問題是您將新版本號寫在原始文件之后(沒有版本行):
inputFile.write(str(saved))
inputFile.write(str(new_version))
您可以通過以下方式解決此問題:分別保存包含版本的行之前和之后的行,然后以正確的順序保存它們:
#!/usr/bin/env python
inputFile = open('CMakeLists.txt', 'r')
version = None
savedBefore = ""
savedAfter = ""
for line in inputFile:
if "_PATCH " in line:
print "inside: ", line
version = line
elif version is None:
savedBefore += line
else:
savedAfter += line
inputFile.close()
inputFile = open('CMakeLists.txt', 'w')
x = version.split('"')
print "x: ", x
a = x[0]
b = int(x[1]) + 1
c = x[2]
new_version = str(a) + '"' + str(b) + '"' + str(c)
print "new_version: ", new_version
inputFile.write(savedBefore)
inputFile.write(str(new_version))
inputFile.write(savedAfter)
inputFile.close()
注意:您可能需要在版本行中添加一些額外的文本,以使其具有與原始格式相同的格式(例如添加“ _PATCH”)。
您的代碼有很多要說的。
您的錯誤是您正在編寫“已保存”行,並且在編寫修改后的版本之后。 因此,此修改的行將被寫入文件的末尾。
此外,我建議您使用with
語句。
lines = []
with open('CmakeLists.txt', 'r') as _fd:
while True:
line = _fd.readline()
if not line:
break
if '_PATCH ' in line:
a, b, c = line.split('"')
b = int(b) + 1
line = '{} "{}" {}'.format(a, b, c)
lines.append(line)
with open('CmakeLists.txt', 'w') as _fd:
for line in lines:
_fd.write(line)
此代碼未經測試,可能包含一些錯誤...此外,如果您的輸入文件很大,則將每一行都放在列表中可能是個壞主意。
#!/usr/bin/env python
inputFile = open('CMakeLists.txt', 'r')
version = None
saved = ""
for line in inputFile:
if "_PATCH " in line:
print "inside: ", line
version = line
x = version.split('"')
print "x: ", x
a = x[0]
b = int(x[1]) + 1
c = x[2]
new_version = str(a) + '"' + str(b) + '"' + str(c)
saved += new_version
else:
saved += line
inputFile.close()
inputFile = open('CMakeLists.txt', 'w')
inputFile.write(str(saved))
inputFile.close()
如果找到某行,則更新其內容並添加到saved
,一旦for
循環結束,只需將saved
寫入文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.