如何更改文件中单个参数?

74 阅读2分钟

我想要更改文件 lekovi.txt 中的文本,但要更改的内容是特定的。每一行都是这样的:

huake_00015_.jpg

name|2ndname|price|stock|serial|False/True|number(starting from 1 and appending by 1

每次我选择要在哪个数字下更改时,我都想从 False 更改为 True。


代码片段


print("\n-- Brisanje lekova -- \n")
print("+=============================================================================+")
print("| Br. |    Naziv      |  Gen. Naziv  | Serijski br. | Kolicina|      Cena     |")
print("+=============================================================================+\n")
n = 1
lista_lekova = open("lekovi.txt",'r').readlines()
redovi = []
lek={}
for i in lista_lekova:
    deo = i.strip().split("|")
    redovi.append(deo)
    print("| ",  n ,  " | {:13} | {:12} | {:12} | {:7} | {:6}.00 din | ".format(deo[0],deo[1],deo[2],deo[3],deo[4]))    
    n = n + 1

    lek[0] = deo[0]
    lek[1]= deo[1]
    lek[2]= deo[2]
    lek[3]= deo[3]
    lek[4]= deo[4]
    lek[5]= deo[5]
    lek[6]= deo[6]
print("+=============================================================================+")
izbrisanilek = input("Lek pod kojim brojem zelite da izmenite:  ")
izbrisaniLek = int(izbrisanilek)
izbrisaniLek = izbrisaniLek - 1
for lek in lista_lekova:
    print (lek.deo[6])
    k = "23"
    if k == izbrisaniLek:
        ceoLek = deo[0] + "|" + deo[1] + "|" + deo[2] + "|" + deo[3] + "|" + deo[4] + "|" + "True" + "|" + deo[6] + "\n"
        lekovistr = open("lekovi.txt" , "w")
        lekovistr.write(ceoLek)
        lekovistr.close()

2. 解决方案


根据给出的代码,问题在于代码中的 for 循环,它遍历了文件中的每一行,并且只改变了一行。

要仅更改文件中的一个参数,可以采用以下方案:

  1. 使用 with open("lekovi.txt",'r') 作为 lekovistr 打开文件。

  2. 使用 lista_lekova = lekovistr.readlines() 读取文件中的所有行。

  3. 获取要更改的行号,根据用户输入。

  4. 将要更改的行从列表中删除。

  5. 更改该行的值。

  6. 将更改后的行添加回列表中。

  7. 使用 lekovistr.close() 关闭文件。

这样,就可以只更改文件中的一行,而不会影响其他行。


代码片段


with open("lekovi.txt",'r') as lekovistr:
    lista_lekova = lekovistr.readlines()

izbrisanilek = input("Lek pod kojim brojem zelite da izmenite:  ")
izbrisaniLek = int(izbrisanilek)
izbrisaniLek = izbrisaniLek - 1

deo = lista_lekova[izbrisaniLek].split("|")
deo[5] = "True"
lista_lekova[izbrisaniLek] = "|".join(deo)

with open("lekovi.txt",'w') as lekovistr:
    lekovistr.writelines(lista_lekova)

更改内容说明


  1. 使用 with open("lekovi.txt",'r') as lekovistr 打开文件。
  2. 使用 lista_lekova = lekovistr.readlines() 读取文件中的所有行。
  3. 获取要更改的行号,根据用户输入。
  4. 使用 lista_lekova[izbrisaniLek].split("|") 将该行拆分成一个列表。
  5. 使用 deo[5] = "True" 将该列表的第 6 个元素(索引为 5)更改为 "True"。
  6. 使用 "|".join(deo) 将该列表重新连接成一个字符串。
  7. 使用 lista_lekova[izbrisaniLek] = "|".join(deo) 将更改后的行添加到列表中。
  8. 使用 lekovistr.writelines(lista_lekova) 将更改后的列表写入文件中。