在新行上写一个文件


import os.path                    
class Menu:
dic={}
def buildMenu(self):
file = "C:/Users/zz/Desktop/Class/menu.txt" 
if os.path.isfile(file):
pass
else:
f=open("C:/Users/zz/Desktop/Class/menu.txt" ,"w")
name=input("Enter menu name")
while name!="":
price=input("Enter the price")
f.write(name+":"+price+"n")
name=input("Enter menu name")
f.close()

f=open("C:/Users/zz/Desktop/Class/menu.txt" ,"r")
line=f.readline() 
while line:
s=line.split(':')
print(s)
self.dic[s[0]]=s[1]
line=f.readline()
# s=line.split(':')
# self.dic[s[0]]=s[1]
f.close()

def showMenu(self):
for x,y in self.dic.items():
print(x+':'+y)
print(self.dic.items())
menu=Menu()
menu.buildMenu()
menu.showMenu()

我想在输入代码后换行。

所以我写了f.write(name+":"+price+"n")

我的代码运行良好。

如果我打印一行,n没有打印,所以它很好。

但打印整个字典,n出现了。

此外,n未保存在menu.txt中。

如何删除字典中的n

在代码的这一部分中,您可以尝试此更改。有评论-

def buildMenu(self):
file_content = [] # list for file data to be written
file = "C:/Users/zz/Desktop/Class/menu.txt" 
if os.path.isfile(file):
pass
else:
f=open("C:/Users/zz/Desktop/Class/menu.txt" ,"w")
name=input("Enter menu name")
while name!="":
price=input("Enter the price")
file_content.append(name+":"+price) # append to list the file info
f.write(name+":"+price) # write to file without the n
name=input("Enter menu name")
f.close()

file_content将具有原始代码中没有换行符的数据。

问题是你打开文件是为了写入,所以每次使用f.write()重写所有文件时,你都必须打开它来附加open("file.txt", "a"),然后如果你想清除它f.truncate()和onli,则使用f.write()

我重写了整个类,以演示如何做到这一点。重点是任务的分离。添加条目、保存和加载是不同的事情。

最初的问题在self.entries[name] = price.rstrip()行中得到了解决,我们用rstripprice的末尾删除了空白字符。

import os.path

class Menu:
def __init__(self, filename=None):
if filename is None:
filename = "C:/Users/zz/Desktop/Class/menu.txt"
self.filename = filename
self.entries = {}
def add_entries(self):
name = input('Enter menu name')
while name != '':
price = input('Enter the price''')
self.entries[name] = price
name = input("Enter menu name")
def file_exists(self):
return os.path.isfile(self.filename)
def load(self):
self.entries = {}
with open(self.filename, 'r', encoding='UTF-8') as menufile:
for line in menufile:
name, price = line.split(':')
self.entries[name] = price.rstrip()
def save(self):
with open(self.filename, 'w', encoding='UTF-8') as menufile:
for name, price in self.entries.items():
menufile.write(f'{name}:{price}n')
def show(self):
for name, price in self.entries.items():
print(f'{name}:{price}')

def main():
menu = Menu()
menu.add_entries()
menu.save()
menu.show()
menu = Menu()
menu.load()
menu.add_entries()
if not menu.file_exists():
menu.save()
menu.show()

if __name__ == '__main__':
main()

在我自己的代码中,我不会在类中使用input,但我保持原样

相关内容

最新更新