6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)

2024-08-10
| 22页
| 130人阅读
| 9人下载
普通

内容正文:

任务6.1 文件操作 记账本 6.1 文件操作——记账本 【任务描述】 小T想编写一个电子记账本,功能类似银行账单,用户可以录入收入、支出及对应备注,并查询账单,了解详情。程序根据用户录入数据,生成包含日期、收入、支出、余额、备注等信息的记录并写入文件进行保存,能够读取文件内容以便用户查询。 6.1 文件操作——记账本 【任务分析】 根据任务需求,完成该任务需要对文件进行读写操作,实现对数据的记录。 (1)写入数据,将收支数据以适当的数据格式写入文件。 (2)读取数据,读取文件内容获取收支数据并参与计算。 (3)模块化设计,根据不同的功能,细分多个模块并实现相应功能。 6.1 文件操作——记账本 6.1.1 文件的打开 6.1.2 文件的关闭 6.1.3 文件的读写操作 6.1.4 文件的定位读写 6.1.5 任务实现——电子记账本 6.1.4 文件的定位读写 python在文件读写过程中使用文件指针记录文件读写的当前位置; 打开文件时,文件指针指向初始位置,随着文件的读写操作,指针不断移动。 6.1.4 文件的定位读写 操作方法 说明 f.tell() tell()方法获取文件文件指针的当前位置 f.seek(offset, whence) seek()方法可以改变文件指针的位置; offset:偏移量。偏移量为正向文件尾移动;偏移量为负,向文件开头移动。 whence:参考点。0表示文件开头(默认值);1表示当前位置;2表示文件末尾。 注意:文本文件没有使用二进制模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾或中间计算时就会引发异常。 在对文件进行读写操作时,程序会从上次读写的位置继续操作,其实python在文件读写过程中使用了文件指针这个概念,文件指针所指位置即为文件当前位置,打开文件时,文件指针指向初始位置,随着文件的读写操作,指针不断移动。 6.1.4 文件的定位读写 其中,f为文件对象。tell()方法返回一个数字,表示文件指针的当前位置,即相对于文件开头的字节数。 f.tell() 1.tell()方法 在对文件进行读写操作时,可以通过tell()方法来获取文件指针的当前位置,其语法格式如下: 6.1.4 文件的定位读写 【例6-9】使用tell()方法使用 with open('data6-3.txt','r') as f: # 以只读模式打开文件,文件指针指向文件开头 print(f.tell()) # 查看文件指针当前位置 print(f.read(5)) # 读取5个字节 print(f.tell())with open('data6-3.txt','a') as f: # 以追加模式打开文件,文件指针指向文件结尾 print(f.tell()) 0 Hello 5 66 从这个示例中,我们可以看到指针的移动效果。通过文件指针的移动,我们就可以对文件的任意位置进行读写操作。 6.1.4 文件的定位读写 f:文件对象。 offset:偏移量。表示指定位置相对于参考点移动的字节数。偏移量为正表示向文件末尾移动,偏移量为负表示向文件开头移动。 whence:参考点。表示文件指针移动的参考位置。0表示文件开头(默认值);1表示当前位置;2表示文件末尾。 f.seek(offset, whence) 2.seek()方法 使用seek()方法可以改变文件指针的位置,从而实现读写文件的指定位置,其语法格式如下: 6.1.4 文件的定位读写 【例6-10】使用seek()方法。 with open('data6-3.txt','rb') as f: f.seek(5,0) # 从文件开头向文件末尾移动5个字节 print(f.tell()) f.seek(5,1) # 从当前位置向文件末尾移动5个字节 print(f.tell()) f.seek(-5,2) # 从文件末尾向文件开头移动5个字节 print(f.tell()) 5 10 61 从这个示例中,我们可以看到指针的移动效果。通过文件指针的移动,我们就可以对文件的任意位置进行读写操作。 即学即答: 以下选项中,不是Python文件处理.seek()方法的参数是? A.0 B.1 C.-1 D.2 6.1.4 文件的定位读写 6.1.5 任务实现——记账本 6.1.5 任务实现——记账本 【任务描述】 编写电子记账本程序,使用户能够录入收入、支出及对应备注。程序根据用户录入的数据,生成包含日期、收入、支出、余额、备注等信息的记录并写入文件进行保存,能够读取文件内容以便用户查询。 6.1.5 任务实现——记账本 【任务分析】 程序通过对文件进行读写操作实现数据记录的需求。根据任务需求可以将程序分为三个功能模块:收入记录、支出记录、查询详情。程序采用模块化编程,通过不同函数实现相应功能。 (1)收入记录模块:接收用户收入数据,读取上次余额,计算新的余额,生成包含日期、收入、支出、余额、备注信息的新记录并将其写入文件。 (2)支出记录模块:接收用户支出数据,读取上次余额,计算新的余额,生成包含日期、收入、支出、余额、备注信息的新记录并将其写入文件。 (3)账单查询模块:读取账本文件信息,格式化后输出。 (4)功能菜单模块:打印功能菜单,根据用户选择调用不同的模块。 6.1.5 任务实现——记账本 结合程序需求,设计程序函数及功能如下: (1)menu_ show():菜单函数,显示功能菜单。 (2)save():收入记录函数,记录收入信息。 (3)cost():支出记录函数,记录支出信息。 (4)bill_show():显示账单函数,显示全部账单信息。 (5)main():主函数,程序入口,初始化账单文件,功能菜单选择。 程序使用的账单文件为:bill_record.db。 【例6-11】任务实现:电子记账本。 6.1.5 任务实现——记账本 def menu_show(): print("="*50) print("电子记账本V1.0") print("1.支出登记") print("2.收入登记") print("3.查看账单") print("0.退出系统") print("="*50) (1)menu_show()菜单函数。 6.1.5 任务实现——记账本 def save(): with open(fname, 'r') as f: content = f.read() account = eval(content) old_balance = account[-1]['balance'] new_bill = {} new_bill['date'] = time.strftime("%Y-%m-%d") new_bill['outgoings'] = 0 new_bill['incomings'] = int(input("请输入收入金额(元):")) new_bill['comment'] = input("收入说明:") new_bill['balance'] = old_balance + new_bill['incomings'] account.append(new_bill) with open(fname, 'w') as f: f.write(str(account)) (2)save()收入记录函数。 17 6.1.5 任务实现——记账本 def cost(): with open(fname, 'r') as f: content = f.read() account = eval(content) old_balance = account[-1]['balance'] new_bill={} new_bill['date'] = time.strftime("%Y-%m-%d") new_bill['outgoings'] = int(input("请输入支出金额(元):")) new_bill['comment'] = input("支出说明:") new_bill['incomings'] = 0 new_bill['balance'] = old_balance-new_bill['outgoings'] account.append(new_bill) with open(fname,'w') as f: f.write(str(account)) (3)cost()支出记录函数。 18 6.1.5 任务实现——记账本 def bills_show(): with open(fname, 'r') as f: content = f.read() account = eval(content) print("="*50) print("账单信息如下(单位:元):") print("%-14s%-7s%-7s%-7s%s"%('日期','收入','支出','余额','备注')) for t in account: print("%-15s%-8d%-8d%-8d%-s"%(t['date'],t['incomings'],\ t['outgoings'],t['balance'],t['comment'])) print("="*50) (4)bill_show()显示账单函数。 19 6.1.5 任务实现——记账本 def main(): bill = [{'date':'--------', 'incomings':0, 'outgoings':0, 'balance':0, 'comment':'initial'}] #账单数据采用字典列表存储 if not os.path.isfile(fname): #判断账单文件是否存在 with open(fname, 'w') as f: f.write(str(bill)) while True: menu_show() key = input("请输入数字选择功能(0/1/2/3):") #功能选择 if key == '1': cost() elif key == '2': save() elif key == '3': bills_show() elif key == '0': quit_confirm = input("是否退出?(Y/N)") if quit_confirm.upper() == 'Y': print("开源节流,早日实现小目标!") break else: print("输入错误,请重试!") (5)main()主函数。 20 6.1.5 任务实现——记账本 import time import os fname = "e:/bill_record.db" #指定保存数据的文件 if __name__ == "__main__": main() (6)调用主函数。 21 6.1.5 任务实现——记账本 边学边练: 用Python编写程序,完成以下功能: (1)读取一个存储若干数字(数字间用空格隔开)的文件nums.txt。 (2)对数字进行排序后输出。 $$

资源预览图

6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
1
6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
2
6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
3
6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
4
6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
5
6.1.4 文件的定位读写(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。