Python 在新行上写入文件 导入操作系统路径 类菜单: dic={} def构建菜单(自): file=“C:/Users/zz/Desktop/Class/menu.txt” 如果os.path.isfile(文件): 通过 其他: f=打开(“C:/Users/zz/Desktop/Class/menu.txt”,“w”) 名称=输入(“输入菜单名称”) 而名字="": 价格=输入(“输入价格”) f、 写入(名称+”:“+price+”\n”) 名称=输入(“输入菜单名称”) f、 关闭() f=打开(“C:/Users/zz/Desktop/Class/menu.txt”,“r”) line=f.readline() while line: s=行。拆分(“:”) 印刷品 self.dic[s[0]]=s[1] line=f.readline() #s=行。拆分(“:”) #self.dic[s[0]]=s[1] f、 关闭() def显示菜单(自我): 对于self.dic.items()中的x,y: 打印(x+':'+y) 打印(self.dic.items()) 菜单=菜单() menu.buildMenu() menu.showMenu()
我想在输入代码后换行 所以我写了Python 在新行上写入文件 导入操作系统路径 类菜单: dic={} def构建菜单(自): file=“C:/Users/zz/Desktop/Class/menu.txt” 如果os.path.isfile(文件): 通过 其他: f=打开(“C:/Users/zz/Desktop/Class/menu.txt”,“w”) 名称=输入(“输入菜单名称”) 而名字="": 价格=输入(“输入价格”) f、 写入(名称+”:“+price+”\n”) 名称=输入(“输入菜单名称”) f、 关闭() f=打开(“C:/Users/zz/Desktop/Class/menu.txt”,“r”) line=f.readline() while line: s=行。拆分(“:”) 印刷品 self.dic[s[0]]=s[1] line=f.readline() #s=行。拆分(“:”) #self.dic[s[0]]=s[1] f、 关闭() def显示菜单(自我): 对于self.dic.items()中的x,y: 打印(x+':'+y) 打印(self.dic.items()) 菜单=菜单() menu.buildMenu() menu.showMenu(),python,Python,我想在输入代码后换行 所以我写了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/
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()
文件内容将包含原始代码中没有换行符的数据。问题是您打开文件进行写入,因此每次使用f.write()
重写所有文件时,必须打开文件进行追加打开(“file.txt”,“a”)
然后如果要清除它f.truncate()
然后我只使用f.write()
我重写了整个类来演示如何完成。重点是任务的分离。添加条目、保存和加载是不同的事情
原始问题在self.entries[name]=price.rstrip()
行中得到解决,我们使用rstrip
删除price
末尾的空白字符
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
,但我保留了原样。问题可能是s[1]包含换行符,而打印也包含换行符。您可以按如下方式更改代码:self.dic[s[0]]=s[1].rstrip()
您可以尝试这样做:对于f.readlines()中的行:print(data.rstrip())您说过“\n
未保存在menu.txt中”。当然它被保存了。您是否希望文本\n
显示在文件中<代码>“\n
”只是一个字符,该字符是换行符。因此,如果文件中有多行,则会写入“\n”
。而line=f.readline()
中的循环过于复杂。文件是可编辑的。删除那些line=f.readline()
行,并将while行:
替换为for f:
中的行。现在如何区分文件中的多个条目?根据这个问题,问题是\n
出现在字典中。通过将\n
从处理它的f.write(…)
中删除。我不认为销毁数据以在另一个地方获得正确的数据是一个好的解决方案。但要由询问者决定他们是否喜欢这个解决方案。