我应该如何通过Python替换文本文件中的部件?

时间:2014-01-15 20:02:26

标签: python file-io replace

好的,所以这是交易,伙计们:

我一直在尝试使用Python(3.3),试图创建一个python程序,能够在游戏中为武器生成随机名称,并替换位于文本文件中的旧名称。这是我的功能:

def ModifyFile(shareddottxt):
  global name
  a = open(str(shareddottxt) , 'r')
  b = a.read()
  namefix1 = '''SWEP.PrintName          = "'''
  namefix2 = '''"               //sgaardname'''
  name1 = b.find(namefix1) + len(namefix1)
  name2 = b.find(namefix2, name1)
  name = name + b[name1:name2]        ## We got our weapon's name! Let's add the suffix.
  c = open((shareddottxt + ".lua"), 'r+')
  for line in b:
    c.write(line.replace(name, (name + namesuffix)))
  c.close()
  a.close

如您所见,我首先打开我的文本文件以查找武器的名称。之后,我尝试创建一个新文件并从旧文件中复制内容,同时替换(name + namesuffix)的武器名称。但是,在调用该函数后,我什么都没得到。没有任何文件。即使我手动将文件添加到文件夹,它也不会改变。完全没有。

Namesuffix是在早期通过另一个函数生成的。它被保存为全局变量。

另外,我的文本文件很大,但我想编辑的是:

SWEP.PrintName          = "KI Stinger 9mm"     //sgaardname 

预期结果:

SWEP.PrintName          = "KI Stinger 9mm NAMESUFFIX"     //sgaardname  

我在哪儿搞砸了,伙计们?

1 个答案:

答案 0 :(得分:0)

这样的东西更像是pythonic。

def replace_in_file(filename, oldtext, newtext):
    with open(filename, 'r+') as file:
        lines = file.read()
        new_lines = lines.replace(oldtext, newtext)
        file.seek(0)
        file.write(new_lines)

如果您不想替换该文件

def replace_in_file(filename, oldtext, newtext):
    with open(filename, 'r') as file, open(filename + ".temp", 'w') as temp:
        lines = file.read()
        new_lines = lines.replace(oldtext, newtext)
        temp.write(new_lines)