我对我的代码有一些疑问:
def entry_book():
book = ["autor", "ime", "godina", "ISNB", "zanr", "cena", "broj"]
print ("Podaci za knjigu:")
book[0] = input ("Autor: ")
book[1] = input ("Naslov: ")
book[2] = input ("Godina: ")
book[3] = input ("ISNB: ")
book[4] = input ("Zanr: ")
book[5] = input ("Cena: ")
book[6] = input ("Kolicina: ")
record= "{}|{}|{}|{}|{}|{}|{}".format (book[0], book[1], book[2], book[3],
book[4], book[5], book[6])
print (book)
print (record)
f = open('books.txt','w')
f.write (record)
f.close()
f = open("books.txt")
x = f.read()
f.close()
print (x)
record1 = record.split('|')
print (record1)
second_meni()
这是存储书籍信息的代码,我想稍后访问(比如在图书馆)。但是,每次添加/创建新书时,旧书都会被删除。任何人都可以帮我重写代码,以便它也可以存储旧数据。或者请解释一下正确的方法是什么?
答案 0 :(得分:6)
你必须使用
f = open('knjige.txt', 'a')
' W'重新创建文件(因此仅将其用于新文件,或者如果您不介意将其覆盖,则会附加到文件中。
请参阅python open built-in function: difference between modes a, a+, w, w+, and r+?
还有一些不相关的建议:
答案 1 :(得分:2)
我冒了一下 pythonizing 你的代码。
def unos_knjiga():
headers = ["Autor", "Naslov", "Godina", "ISNB", "Zanr", "Cena", "Kolicina"]
print("Podaci za knjigu:")
knjiga = [input("{}".format(obj + ': ')) for obj in headers] # see 1
zapis = '|'.join(knjiga) # see 2
print(knjiga)
print(zapis)
with open('knjige.txt', 'a') as f: # see 3
f.write(zapis + '\n')
# i guess this is for testing?
with open("knjige.txt", 'r') as f:
x = f.read()
print(x)
# and this too?
zapis1 = zapis.split('|')
print(zapis1)
# this is not mentioned anywhere
second_meni()
1)这是列表理解。它通过循环遍历创建列表。在这种情况下,我们循环遍历header
列表并使用其项来构造input
语句。提供的输入存储在列表中。
2).join()
方法。它做你明确做的。使用它们之间的字符串连接迭代器中的项目。
3)with
关键字。管理文件,以便您不必。除非有理由不使用它,否则请使用它。这也是您的代码存在真正问题的地方。您必须使用'a'
模式。 'a'
用于追加,'w'
用于写入。在这种情况下,写意味着删除那里的所有内容并编写这些新东西。另请注意,'a'
模式也可以创建文件,您无需暂时切换到'w'
('r'
不会; 'r'
用于读取< / em>的)。
干杯!
答案 2 :(得分:1)
我认为有两种方法可以做到这一点:
第一次
f = open('knjige.txt','w')
是负责重写文件中现有数据的代码段。 python提供的用于向现有数据附加一些新数据的其他选项是打开文件以使用追加&#39; a&#39;方法。所以你可以用
替换你的上述陈述f = open('knjige.txt','a')
它不会使用您输入的新数据替换文件。
<强> SECOND 强>
其他选项是以读取方法f = open('knjige.txt','r')
打开文件,并将现有数据复制到变量(variable=f.read('knjige.txt')
)。如果需要维护数据类型,还可以使用 pickle模块及其函数 dump 和 load 。
现在将您的新数据连接到&#39;变量&#39;中的值。并再次以write方法打开文件并将其写回。
答案 3 :(得分:0)
您打开文件的呼叫f = open('knjige.txt','w')
打开文件,截断现有内容(如果存在)。如果使用附加内容的模式打开文件,例如a
,则不应删除以前的行。有关打开读/写文件的详细信息,请参阅https://docs.python.org/2/library/functions.html#open。