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