python .cpp读取,追加,保存和关闭但不起作用

时间:2016-10-26 07:26:53

标签: python c++ append

我是初学者并且有以下任务。

  • 要搜索目录(文件夹).cpp文件(文本)"已完成"
  • 打开文件中的
  • 并搜索某个字符串+找到"完成"
  • 之后,找到的值将由另一个(追加)"也部分"
  • 替换
  • 最后存储和关闭"也可以工作"

问题是我的脚本找到了相应的条目,它也会改变"然而,之前和之后的所有内容都来自" DELETES"" 我需要改变什么?

感谢。

import re    
with open("test.cpp", "r+") as f:
match = re.search("^(?P<Text1>.*)COMPILE_TIME_ASSERT\(\s*(?P<Text2>.+),(?P<Text3>\s*)(?P<Text4>\S*)(?P<Text5>\s*\)\s*;s*)",               "COMPILE_TIME_ASSERT(TABLE_LENGTH(PopupType2ActionID) == EPopupType::ARRAY_SIZE , PopupType2ActionID_table_needs_revision);")

result = '"' + match.group('Text4') + '"'

如果匹配:

print("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), 
match.group('Text2'), result, match.group('Text5')))

f.write("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), match.group('Text2'), result, match.group('Text5')))

f.close()

1 个答案:

答案 0 :(得分:0)

如果我理解正确你找到了字符串 - &gt;匹配,然后创建一个新字符串。

不幸的是,你做的方式不合适(无论你使用什么编程语言)。这是因为你的文件是以r +打开的,但当你写这行时,所有其余部分都被删除了:-)

为了正确地做到这一点,你需要有一个源文件和一个目标文件,否则你将只用一行替换整个文件:

f.write("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), match.group('Text2'), result, match.group('Text5'))) 

好的那么你可以做的就是跟随,试试吧: 1)将原始文件移动到文件〜(正如Microsoft Word所做的那样):

import shutil
shutil.move( afile, afile+"~" )

destination= open( aFile, "w" )
source= open( aFile+"~", "r" )

2)现在你只会&#34;阅读&#34;从原始文件写入具有原始名称的新文件;)

3)为了方便起见,您现在可以逐行阅读原始文件并:

for line in source:
    match = re.search(Your_matching, line)

    if <matching_condition>:
        destination.write( <New_LINE_after_match> + "\n" )
    else:
    # All the other lines without match, just write back same line
        destination.write(line)

source.close()
destination.close()

这已足以生成正确的文件。然后你可以删除〜文件: - )

这是你在python中可以做到的一种方式:-)否则在linux cli上使用sed命令并修改文件: - )

希望这能澄清您的疑问并解决您的问题。祝你今天愉快!

以下简单示例。在txt文件中,我有一个简单的名字:      约翰      彼得      马尔科      米奇      弗兰克

import re,shutil,os
aFile = "marco.txt"
shutil.move( aFile, aFile+"~" )

destination= open(aFile, "w+" )
source= open(aFile+"~", "r" )

for line in source:
    match = re.search("Marco", line)

    if match:
        destination.write( "Modified_Line" + "\n" )
    else:
    # All the other lines without match, just write back same line
        destination.write(line)

source.close()
destination.close()

os.remove(aFile+"~")

marco.txt文件的输出将在运行程序后输出:

 John
 Peter
 Modified_Line
 Mickey
 Frank

在您的情况下,这应该解决问题。最有可能最大的问题是匹配部分。你必须在re模块中更好地检查,我的它只是一个简单的案例。如果问题解决了,请标记我的答案。