使用python实现替换函数

时间:2015-08-30 18:21:05

标签: python input readfile writefile

我正在尝试运行这样的文件:

*sline
1, 1.0, 2.23
2, 1.0, 9.98
3, 2.0, 10.00
*eline

现在我有一个列表,其中包含如下数据:

datalist = [[1,1.0,2.0],[3,2.0,2.0]]

我想把属于datalist的值用id(datalist [] [0])替换文件中的值,如:

*sline
1, 1.0, 2.0
2, 1.0, 9.98
3, 2.0, 2.0
*eline

我尝试使用:

o = open("file","a") 
for line in open("trychange.txt"):
   line = line.replace("1, 1.0, 2.23","1, 1.0, 2.0")
   line = line.replace("3, 2.0, 10.00","3, 2.0, 2.0")
   o.write(line + "\n") 
o.close()

但它不起作用,它只是添加新值但没有改变旧值。 我怎么处理这个? 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

  1. "r"模式打开文件并阅读所有内容。

    • 在阅读文件内容时(字符串)将行转换为易于处理的数据结构(例如:整数列表......)
  2. 处理以前在内存中读取的内容。

    • 请注意,当您读入文件时(或在读取文件后),您可以构建多个辅助数据结构,以支持您对数据执行操作。例如,在您的情况下,内存数据结构应包含一个包含每行数据的列表,以及一个帮助您使用这两个数字查找行的字典。请参阅下面的示例。
  3. 使用"w"模式再次打开文件,并使用新数据覆盖上一个文件。

    • 您可以逐行将内存数据转换为字符串。
    • 如果您想要“安全”覆盖,则首先创建一个临时文件,写出新数据,然后将临时文件重命名为原始文件。请注意,在unix上,此重命名技术可用于“原子地更改文件内容”。这样您就不应该以部分保存的文件结束。
  4. 内存数据结构示例:

    lines = [
        [1, 1.0, 2.23],
        [2, 1.0, 9.98],
        [3, 2.0, 10.00],
    ]
    
    key_to_lines_index = {
        (1, 1.0): 0,  # 0 is an index to the lines array
        (2, 1.0): 1,  # 1 is an index to the lines array
        (3, 2.0): 2,  # 2 is an index to the lines array
    }
    

    使用上述内存数据结构,您可以轻松应用datalist项。对于每个datalist项,您可以使用key_to_lines_index字典查找必须修改的行,然后修改lines数组中的相应行。完成后,只需从lines数组中写出修改后的文件。

    如果这个帮助不足以让你完成工作,那么你就很难理解编程的基本原则,所以正确的地方就是这样:https://wiki.python.org/moin/BeginnersGuide/Programmers