如何在python中删除特定行并替换它

如何在python中删除特定行并替换它,python,Python,我有一个python游戏,它将用户数据写入如下:bob3到at文本文件。我试图编码,因此如果玩家达到某一点,它将删除关卡编号(在示例中:1)并写入新关卡。我已将这条线拆分为: name, level = line.split() 有什么方法可以做到这一点吗?“更新”普通文件实际上意味着编写一个新文件,然后用新文件替换旧文件-你不能只进行“就地”更新。虽然从技术上讲这是可能的,也不是真正困难的,但它可能不是满足您需求的最有效的解决方案,因为您必须完成整个读取+解析旧文件/写入新文件/为每个更新重

我有一个python游戏,它将用户数据写入如下:
bob3
到at文本文件。我试图编码,因此如果玩家达到某一点,它将删除关卡编号(在示例中:
1
)并写入新关卡。我已将这条线拆分为:

name, level = line.split()
有什么方法可以做到这一点吗?

“更新”普通文件实际上意味着编写一个新文件,然后用新文件替换旧文件-你不能只进行“就地”更新。虽然从技术上讲这是可能的,也不是真正困难的,但它可能不是满足您需求的最有效的解决方案,因为您必须完成整个读取+解析旧文件/写入新文件/为每个更新重命名(并且可能还必须根据您的应用程序处理并发访问)。使用某种类型的数据库(键/值、关系型、文档等)可能是更好的解决方案,因为它将处理大部分的内部事务

对于你的问题,一个非常天真的答案是这样的:

def update_level(username, new_level):
   inpath = "/path/to/your/file"
   outpath = "path/to/tmpfile"
   with open(inpath) as infile:
       with open(outpath, "w") as outfile:
           for line in infile:
               line = line.strip()
               name, level = line.split()
               if name == username:
                   line = " ".join((username, new_level))
               outfile.write("%s\n" % line)
   os.rename(outpath, inpath)

最好使用数据库或其他什么…@hcwhsa也许可以选择使用工具架或pickle。我收到一个错误:Typeerror:Join()正好取1个参数(给定2个),我是否需要创建tmpfilehmm。不起作用。我已经将username变量分配到name上的name变量中,level=line.split()。此外,此定义高于实际代码。这会影响到这一行为吗?你需要完整的代码吗?@Dashadower:“不工作”是对问题最无用的描述。FWIW我尝试了上面的代码,它的工作非常完美。。。另外,我不明白你所说的“我已将用户名变量分配到名称上的name变量中,level=line.split()”或“此定义高于实际代码”是什么意思。因此我有两个模块,游戏本身和levels.py,其中包含def格式的级别。因此,我在levels.py上使用了上面的代码,这将导入模块游戏,游戏中有代码:name,level=lines.split()。因此,新的_级别=级别+1。