2015-12-08 59 views
0

该程序必须根据起始代码更改一行中的最后一个参数。现在如何首先更改文件中的最后一个参数

文件:

312|fotelja snesko|bela|15|2900|fotelja|False 
621|digimon tabure|crna|25|850|tabure|False 

代码为:>> 312

文件后:

312|fotelja snesko|bela|15|2900|fotelja|True 
621|digimon tabure|crna|25|850|tabure|False 

我现在的工作。

parameter = input("\nCode is >> ") 

with open("komad_namestaja.txt", "r") as fileNAME: 
    allDATA = fileNAME.readlines() 
    for linija in allDATA: 
     linija = linija.split("|") 

     if parameter == linija[0]: 
      linija[6] = "True" 

有了这个,我读了文件中的每一行,找到了我需要的行。我只需要在该行中将False更改为True。我该如何改变它?

+0

因为它看起来像您成功设定了新的价值,只是用加入(“|”)来构建新的字符串,并将其写回文件。 – benjamin

+0

是的,我可以做到这一点,但我怎么才能删除与虚假结束? – RedIcon

+0

我明白了,你已经接受了一个答案。如果你必须经常执行这些任务,查看工具'sed'(流编辑器)和'awk'可能会有所帮助。 – benjamin

回答

1

至于,你的文件是不是太大(假设1 GB),无需临时文件。以下解决方案可以帮助你。我们的想法是:

  1. 转换文件内容的列表
  2. 斯普利特innerLists
  3. 修改根据你的病情列表
  4. 形式innerLists
  5. 终于写回相同文件。
  6. 开放模式应该是r+,这样它可以读取和写入文件。

让我们来看看下面的代码:

with open('komad_namestaja.txt','r+') as f: 
    data = f.readlines() 
    output_data=[] 
    for i in data: 
     lst=i.split("|") 
     if(lst[0]=='312'): 
      lst[-1]='True\n' 
     output_data.append("|".join(lst)) 
    f.seek(0) 
    f.writelines(output_data) 
1

你需要做的就是打开一个临时文件,写入你的结果到该文件,然后用新的文件替换旧文件:

fh, abs_path = mkstemp() # Create a temporary file 
with open(abs_path,'w') as new_file: 
    with open("komad_namestaja.txt", "r") as old_file: 
     for line in old_file: 
      linija = linija.split("|") 
       if parameter == linija[0]: 
        linija[6] = "True" 
      new_file.write(linija) 
close(fh) 
remove("komad_namestaja.txt") # Remove original file 
move(abs_path, "komad_namestaja.txt") # Move new file to old file location 
相关问题