我想要更改文件 lekovi.txt 中的文本,但要更改的内容是特定的。每一行都是这样的:
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 循环,它遍历了文件中的每一行,并且只改变了一行。
要仅更改文件中的一个参数,可以采用以下方案:
-
使用 with open("lekovi.txt",'r') 作为 lekovistr 打开文件。
-
使用 lista_lekova = lekovistr.readlines() 读取文件中的所有行。
-
获取要更改的行号,根据用户输入。
-
将要更改的行从列表中删除。
-
更改该行的值。
-
将更改后的行添加回列表中。
-
使用 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)
更改内容说明
- 使用 with open("lekovi.txt",'r') as lekovistr 打开文件。
- 使用 lista_lekova = lekovistr.readlines() 读取文件中的所有行。
- 获取要更改的行号,根据用户输入。
- 使用 lista_lekova[izbrisaniLek].split("|") 将该行拆分成一个列表。
- 使用 deo[5] = "True" 将该列表的第 6 个元素(索引为 5)更改为 "True"。
- 使用 "|".join(deo) 将该列表重新连接成一个字符串。
- 使用 lista_lekova[izbrisaniLek] = "|".join(deo) 将更改后的行添加到列表中。
- 使用 lekovistr.writelines(lista_lekova) 将更改后的列表写入文件中。