求助,怎么改写io的内容
我在写图书馆管理系统用了GUI和IO。
可是当我新增书籍时
book_num = Entry()
book_num.grid(row=2,column=4)
book_name = Entry()
book_name.grid(row=3,column=4)
book_author = Entry()
book_author.grid(row=4,column=4)
book_standing= Entry()
book_standing.grid(row=5,column=4)
book_total = Entry()
book_total.grid(row=6,column=4)
def new():#采编入库
if book_num.get() == ""or book_name.get() == ""or book_author.get()== "" or \
book_standing.get()== "" orbook_total.get() == "":
messagebox.showerror('出错了!','书籍信息未填全')
else:
with open('D:\\Dpan桌面\\B类题\\图书数据.txt','a') as f:
content =('\n'+ '书号:%s 书名:%s 箸者:%s 现存量:%s 总库量:%s' % \
(str(book_num.get()),str(book_name.get()),str(book_author.get()), \
str(book_standing.get()),str(book_total.get())))
f.writelines(content)
这一步,我发现如果我再新增一次同样名字的书籍,就无法改变现存量和总库量。
有什么好办法可以再加同名字的书籍时,只改变现存量和总库量吗 你给的信息不全,不知道问题出在哪儿了
你的程序,现在是通过什么来改变现存量和总库量的?
难道是根据书名?
总库量一个是根据书号来改变吧,每一本书应该有一个书号,书号才应该是唯一识别码吧。 sunrise085 发表于 2020-4-13 14:22
你给的信息不全,不知道问题出在哪儿了
你的程序,现在是通过什么来改变现存量和总库量的?
难道是根据书 ...
代码本身没问题,只是想知道怎样可以在下一次新增入库时,直接改变库存、总库存 sunrise085 发表于 2020-4-13 14:22
你给的信息不全,不知道问题出在哪儿了
你的程序,现在是通过什么来改变现存量和总库量的?
难道是根据书 ...
'\n'+ '书号:%s 书名:%s 箸者:%s 现存量:%s 总库量:%s'这一句只是把信息写在txt里。 Jakcy 发表于 2020-4-13 14:26
代码本身没问题,只是想知道怎样可以在下一次新增入库时,直接改变库存、总库存
没说你的代码有问题,只是你提问的时候给的信息不全。
现在根本不知道你的现存量和总库量是是根据什么进行统计的。不知道这个变量是干什么的,怎么知道如何修改? sunrise085 发表于 2020-4-13 14:28
没说你的代码有问题,只是你提问的时候给的信息不全。
现在根本不知道你的现存量和总库量是是根据什么进 ...
我也不知道现存量、总库量如何统计,所以想问问老哥怎么弄 Jakcy 发表于 2020-4-13 14:30
我也不知道现存量、总库量如何统计,所以想问问老哥怎么弄
你这表达能力堪忧啊。。。
听的还是云里雾里。
不过好像有一点店明白了。
修改总库量和现存量与你这个标出来的红色代码没有关系呗~
看你发出来的代码片段,在new函数上方
book_total 和book_standing这两个量,这不是能获取么?
在new函数内,else中新增数据成功之后,去修改对应的这两个数据不就可以了么 sunrise085 发表于 2020-4-13 14:41
你这表达能力堪忧啊。。。
听的还是云里雾里。
不过好像有一点店明白了。
好吧。不好意思。可是book_total是Entry出来的对象呀。怎么修改。
而且怎么在txt中修改呢。。 Jakcy 发表于 2020-4-13 14:43
好吧。不好意思。可是book_total是Entry出来的对象呀。怎么修改。
而且怎么在txt中修改呢。。
Entry出来的数据难道没有来源?是你手动输入的?
txt是在你每次新增一本书的时候都会在后面追加一行?
然后追加的这一行总有书号、书名、箸者、现存量、总库量?
写txt文件的时候直接将book_standing和book_total两个量分别+1是否是你的预期?
content =('\n'+ '书号:%s 书名:%s 箸者:%s 现存量:%s 总库量:%s' % \
(str(book_num.get()),str(book_name.get()),str(book_author.get()), \
str(book_standing.get()+1),str(book_total.get()+1)))
就这样吧。实在不明白你的问题到底是什么。不管了。你对问题的表述能力太差了。。。 你这代码根本没有经过数据处理,只是简单地每次把输入的数据写入到文件中去,自然是没办法自动进行汇总处理的。可以使用pandas,先用pandas读出文件内容,然后输入数据,用pandas处理完之后再写入到文件里去。如果数据量不大,格式相对固定,也可以自己写代码,读出数据,处理数据,写回数据。 sunrise085 发表于 2020-4-13 14:53
Entry出来的数据难道没有来源?是你手动输入的?
txt是在你每次新增一本书的时候都会在后面追加一行? ...
好,不好意思,麻烦了!! txxcat 发表于 2020-4-13 14:56
你这代码根本没有经过数据处理,只是简单地每次把输入的数据写入到文件中去,自然是没办法自动进行汇总处理 ...
好,谢谢老哥,大概明白了!
pandas没学过,可以教一下怎么自己写代码吗。。 本帖最后由 txxcat 于 2020-4-13 23:37 编辑
Jakcy 发表于 2020-4-13 15:01
好,谢谢老哥,大概明白了!
pandas没学过,可以教一下怎么自己写代码吗。。
你的文件格式不大适合用pandas处理,pandas最好是存成csv格式,象这样:
书号,书名,箸者,现存量,总库量
001,零基础入门学习Python,小甲鱼,22,30
002,Python袖珍指南,Mark Lutz,11,19
我就按你提供的格式来进行处理,文件内容这样:
书号:001 书名:零基础入门学习Python 箸者:小甲鱼 现存量:22 总库量:30
书号:002 书名:Python袖珍指南 箸者:Mark Lutz 现存量:11 总库量:19
代码如下,只是演示,没有容错功能:
#模拟输入,库存假设已经处理为整数
book_num='003'
book_name='零基础入门学习C'
book_author='小甲鱼'
book_standing=10
book_total=10
f=open('图书数据.txt',encoding='utf-8')
allbook=[]
newbook=True
for i in f:
if book_num==i.strip(): #如果发现存在,就把库存数字化进行处理后加入列表
book_standing+=int(i[(i.find('现存量')+4):i.find('总库量')].strip())
book_total+=int(i[(i.find('总库量')+4):].split('\n').strip())
content=i[:i.find('现存量')+4]+str(book_standing)+' 总库量:'+str(book_total)+'\n'
newbook=False #如果发现存在,则不是新书
else:
content =i #其他没动的直接加入列表
allbook.append(content)
if newbook: #如果是新书,加入到列表中
content =('书号:%s 书名:%s 箸者:%s 现存量:%s 总库量:%s\n' % \
(book_num,book_name,book_author,book_standing,book_total))
allbook.append(content)
f.close()
f=open('图书数据.txt','w',encoding='utf-8') #覆盖老文件
f.writelines(allbook) #把经过处理的列表写入到文件
f.close()
txxcat 发表于 2020-4-13 23:32
你的文件格式不大适合用pandas处理,pandas最好是存成csv格式,象这样:
我就按你提供的格式来进行 ...
谢谢老哥!明白了
页:
[1]