> ") print("\nPress and parame-6ren">
gpt4 book ai didi

python - 用新输入替换文件中的数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:08 25 4
gpt4 key购买 nike

首先,我的程序必须处理多个文件,每个文件中有 10 个输入,需要明确的是,这只是一小部分。

我现在的代码:

code = input(">> ")
print("\nPress <Enter> and parameter will be same!")

f = open("komad_namestaja.txt", "r")
allDATA = f.readlines()
f.close()
for line in allDATA:
lst = line.split("|")

if code == lst[0]:

print("\nName :", lst[1])
name = input("New Name >> ")
if name == "":
name = lst[1]

f = open("komad_namestaja.txt", "r")
allDATA = f.read()
f.close()
newdata = allDATA.replace(lst[1], name)
f = open("komad_namestaja.txt", "w")
f.write(newdata)
f.close()

print("\ndestination :", lst[2])
destination = input("New destination >> ")
if destination == "":
destination = lst[2]

#Writting function here

之前提交:

312|chessburger|Denmark
621|chesscake|USA

代码输入:312

名称输入:陀螺仪

目的地输入:波兰

输入后的文件:

312|Gyros|Poland
621|chesscake|USA

问题是在文件中进行替换,我不能每次都编写 7 行代码,因为我有 10 x 5 输入,而且我尝试了所有方法,但无法实现此功能。

我必须编写一些函数来读取/写入/替换或替换最后一个输入之后的所有输入。

最佳答案

您不必每次都读入文件来修改一个字段,将其写出,重新打开它以更改另一字段,等等。这是低效的,并且在您的情况下,会导致代码爆炸。

由于您的文件很小,因此您可以一次将所有内容读入内存并在内存中进行处理。您的代码很容易通过 dict 映射.

这是一个函数,它接受文件名并将文件转换为字典。

def create_mapping(filename):
with open(filename, 'r') as infile:
data = infile.readlines()
mapping = {int(k): (i,d) for k,i,d in
(x.strip().split('|') for x in data)}
# Your mapping now looks like
# { 312: ('cheeseburger', 'Denmark'),
# 621: ('chesscake', 'USA') }
return mapping

然后您可以根据用户输入更新映射,因为它只是一个字典。

一旦您想要写出文件,您可以通过迭代键并使用 | 重新加入所有元素来序列化字典。

如果你想使用列表s

如果您想坚持仅使用 list 来处理所有内容,这是可能的。

我仍然建议将您的文件读入列表,如下所示:

def load_file(filename):
with open(filename, 'r') as infile:
data = infile.readlines()
items = [(int(k), i, d) for k,i,d in
(x.strip().split('|') for x in data]
# Your list now looks like
# [(312, 'cheeseburger', 'Denmark'), (621, 'chesscake', 'USA')]
return items

然后,当您收到一些用户输入时,您必须遍历列表并找到包含您想要的内容的元组。

例如,假设用户输入了 code 312,您可以通过以下方式从元组列表中找到包含 312 值的元组:

items = load_file(filename)

# Get input for 'code' from user
code = int(input(">> "))

# Get the position in the list where the item with this code is
try:
list_position = [item[0] for item in items].index(code)
# Do whatever you need to (ask for more input?)
# If you have to overwrite the element, just reassign its
# position in the list with
# items[list_position] = (code, blah, blah)
except IndexError:
# This means that the user's entered code wasn't entered
# Here you do what you need to (maybe add a new item to the list),
# but I'm just going to pass
pass

关于python - 用新输入替换文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com