我是Python 2.7(和编程)初学者。另外,这是我关于SO的第一个问题。
我目前正在构建一个小型购物车应用程序。我将购物车价值存储在txt文件中。如果运行脚本的用户已经在前一个会话的txt文件中保存了购物车,我希望程序提供继续购物车中的这些商品。
这是我到目前为止所做的:
my_file = open("cart.txt", "r")
match = re.findall(r'%s' % enter_name, my_file.read())
my_file.close()
#using a regular expression here to find the person's cart by name
#in cart.txt.
if match:
print "Hello %s, welcome back." % enter_name
print "Do you want to use your previous Shopping Cart?"
continue_cart = raw_input("Type 'yes' or 'no' ")
if continue_cart == "yes":
with open("cart.txt", "r") as my_file:
for line in my_file:
line_list = line.split()
print line_list
#to be continued
最终的印刷声明基本上只是一个占位符,也是我看到发生了什么的方法。我有点卡在那里。最后带有for循环的代码基本上会生成各种行,每行都有一个列表。喜欢这个
['Martin']
['Milk', '2']
['Apple', '4']
我想要做的是"访问"代表产品和价值的价值观数量,然后将它们添加到购物卡类。但是如何处理这个列表才能访问这些值?
感谢任何帮助。感谢。
答案 0 :(得分:1)
正如e4c5所说,不使用更高级的概念(数据库,或只使用简单的json或pickle),你会让自己变得更加困难。
如果你只想直接使用纯文本文件存储和加载值,不仅编写代码要困难得多(老实说,我已经编程多年了,我仍然不相信我做对了!)而且还为每个人(包括你自己在未来)阅读代码。可维护性实际上是 - 从经验 - 编程的冬青。这就是我们毕竟使用python的原因!
那就是说,我明白,你并不是想要建立一个完美的解决方案,而是要学习编程!
那就是说,你的cart.txt可能看起来像这样:
Martin
Milk 2
Apple 4
Eva
Milk 1
然后你的for循环看起来像这样(例如,但正如我所说,这不是一个正确的方法,我 非常脆弱和错误!):
enter_name_found = False
cart_items = {}
for line in my_file:
line_list = line.split()
if len(line_list) == 1:
if line_list[0] == enter_name:
enter_name_found = True
else:
if enter_name_found:
break
else:
if enter_name_found:
cart_items[line_list[0]] = line_list[1]
print(cart_items)
编辑:
为了证明这一切使用数据库有多简单:
以下是保存购物车的完整示例:
import shelve
cart = shelve.open("cart.dat")
cart["Martin"] = {"Apple": 5, "Milk": 2}
cart["Eva"] = {"Milk": 1, "Cat": 4}
cart.close()
从DB加载购物车的完整示例:
import shelve
cart = shelve.open("cart.dat")
print(cart["Martin"])
print(cart["Eva"])