簡體   English   中英

替換文本文件中的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM