python文件基本操作
Python内置的open()函数打开一个文件,创建一个file对象后续可对它操作。
- 程序调用文件,获取数据更新数据,(追加)回写数据到原文件
1. 列表方法格式化数据
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""
1.在文件中写入一定格式数据:
zzx|1213453|3
zff|2343345|2
2.在程序中调用文件数据
3.操作数据(修改增加删除插入)
4.将更新的数据追加写回文件
针对以上功能需求分析开发流程:
程序文件->打开文件->读取数据->回写文件数据->关闭文件
1.将取到数据操作:
1.1将数据字符串进行分割split(),按\n
1.2将数据进行格式化处理,按split('|'),按|分割
2.对数据进行操作:更新,插入,修改,删除等
3.将更新数据再次格式化
4.重新写回到文件
4.1程序读取文件open,进行写入操作write
4.2写入数据
4.3关闭文件
"""
#步骤一1""""""打开文件读取(打印)文件数据
f1 = open ('db.txt','r',encoding= 'GBK ') #打开文件读取(打印)文件数据
data = f1.read()
f1.close()
"""*********************************自己可以设计数据************************************"""
#步骤二2难点实现功能方法""""""将获取的文件数据 分割并格式化处理
user_data_list = [ ] #列表中 嵌套 列表 4个 列表组
user_str_list = data.split( ) #按 \n分割 取到原字符串 """zzx|123456|3\nzff|123456|1\nzxl|123456|2\nwyy|123456|0 """
for item in user_str_list: #循环每一个元素 ,按 | 分割
temp_str_list = item.split('|')
temp_L = [ temp_str_list[0],
temp_str_list[1],
temp_str_list[2],
temp_str_list[3],
temp_str_list[4],
temp_str_list[5], ] # ,temp_str_list[3],temp_str_list[4],temp_str_list[5]
user_data_list.append(temp_L)
#步骤三3""""""操作数据:
#操作:修改
user_data_list[0][0] = 'zld' #注意列表的 下标使用
# user_data_list[0][1] = 'pwd222222' #注意 方法: ' ' 和 没 单引号 区user_data_list[0][2] = '02time' # zld|pwd222222|02time
#操作:增加
user_data_list[0].insert(2,'测试time3,后插入一下')
# user_data_list[0].insert(4,'再插入一下')
# user_data_list[1].insert(0,'插入')
# user_data_list[1].append('增加6664')
# user_data_list[1].insert(1,'插入')
# user_data_list[1].insert(2,'插入')
# user_data_list[1].insert(3,'插入')
# user_data_list[2].append('增加6665')
# user_data_list[2].insert(2,'2')
# user_data_list[3].insert(4,'再让插入一下')
# user_data_list[3].insert(5,'再让插插入一下')
# user_data_list[3].append('增加6666') #在列表的最后位增加 元素
# user_data_list[3].append('增加6666')
# user_data_list[3].append('增加6663')
# user_data_list[4].append('增加6663') # 还没有扩展有索引[4]
#操作:插入
user_data_list.insert(0,'zzm',)
# user_data_list.insert(0,'123456',)
# user_data_list.insert(0,'2',)
#操作:删除
# user_data_list[1].remove('插入') #remove错误用法 ----- 不能以 索引列表来使用
# del user_data_list[1]
# del user_data_list[2]
# print(user_data_list)
#步骤四4""""""将格式化 数据 回写 到文件里
f2 =open('db.txt','a+',encoding='GBK') # 追加回写文件,没有文件就创建文件
# f2 =open('db.txt','w',encoding='GBK') # 回写文件
for item in user_data_list: # 列表里的join 用法: 列表直接转成 字符串
out_str = ("|".join(item)) # join 结合方法
f2.write("\n"+ out_str)
print("更新数据回写完成!")
f2.close()
注意:列表里 join方法技巧:
-
下列为文件 回写数据图片库
1创建的文件:
2. 字典方法格式化数据
#!/usr/bin/python
# -*- coding:utf-8 -*-
#1""""""程序打开文件,读取数据,关闭文件
f1 = open ('db.txt','r',encoding= 'GBK ') #打开文件读取(打印)文件数据
data = f1.read()
f1.close()
#2难点实现功能方法""""""对数据进行分割并格式化处理
user_info_list = [ ] #列表中 嵌套 字典 4个 键值对
user_str_list = data.split( ) #按 \n分割 取到原字符串 """zzx|123456|3\nzff|123456|1\nzxl|123456|2\nwyy|123456|0"""
for item in user_str_list: #循环每一个元素 ,按 | 分割
temp_str_list = item.split('|')
temp_d = {
'name' : temp_str_list[0],
'pwd' : temp_str_list[1],
'times' : temp_str_list[2],
'add' : temp_str_list[3],
'hobby' : temp_str_list[4],
'color' : temp_str_list[5],
}
user_info_list.append(temp_d) # 将字典 放入新 列表中
# 3""""""对数据进行操作
#操作:修改 或 增加
user_info_list[0]['times']= '020202'
user_info_list[0]['add'] = '增加01a'
user_info_list[0]['hobby'] = '增加02a'
user_info_list[0]['color'] = '增加03a'
# user_info_list[1]['times'] = '12time'
# user_info_list[1]['a1'] = '11a'
user_info_list[1]['hobby'] = '12a'
user_info_list[1]['color'] = '13a'
# user_info_list[3]['times'] = '03time'
# user_info_list[3]['add']= '31a'
# user_info_list[3]['hobby']= '32a'
# user_info_list[3]['color']= '33a'
# print(user_info_list)
#操作:删除
# del user_info_list[0]['name']
# del user_info_list[1]['name']
# del user_info_list[1]['pwd']
# del user_info_list[1]['times']
# del user_info_list[1]['name']
# del user_info_list[2]['pwd']
#del user_info_list[2]['times']
#del user_info_list[2]['add']
print(user_info_list,"\n")
#4 难点实现功能方法""""""将数据重新写回文件中
for item in user_info_list:
data_list_t ="|".join( [ item['name'],item['pwd'],item['times'] ,item['add'],item['hobby'],item['color'] ] )
# print("方式一: ", data_list_t)
# line = "%s|%s|%s" % (item["name"],item["pwd"], item["times"]) #占位符方法:填充字符串
# print("方式二: ",line)
f2 = open('db.txt', 'a+', encoding='GBK ')
out_str_new = data_list_t
f2.write(out_str_new + " \n")
print("更新数据回写完成!")
f2.close()
-
下列为文件 回写数据图片库
1创建的文件:
3. 元素分类
#!/usr/bin/python
# -*- coding:utf-8 -*-
# print("Hello world")
"""
元素分类
有如下值集合[11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于
66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
去掉重复元素的方法:三种方式操作技巧
1
list = print(list(set(list_val)))
print(list)
2.
list_new = {}.fromkeys(list_val).keys()
print(list_new)
3.
lists = list(set(list_val))
lists.sort(key=list_val.index)
print(lists)
"""
list_val = [11,432,23,2,43, 22, 66,2,44,223,2, 77, 88]
new_sort_val = {
'k1': [],
'k2': [],
}
for item in list_val:
if item > 66:
new_sort_val['k1'].append(item)
elif item < 66:
new_sort_val['k2'].append(item)
print(new_sort_val)
new_sort_val运行结果:
4. 购物车
#!/usr/bin/python
# -*- coding:utf-8 -*-
# print("Hello world")
"""
购物车:
功能要求:
要求用户输入总资产,例如:2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods = [
{"computer": "电脑", "price": 1999},
{"mouse": "鼠标", "price": 10},
{"yacht": "游艇", "price": 20},
{"beauty": "美女", "price": 998},
]
"""
assets = 2000 # 总资产,购买商品小于总资产可购买,否则提示余额不足请充值后购买
# goods 一个列表里,用存放所有可供购买的商品,包括名称和价格
goods = [
{"computer" : "电脑", "price": 999},
{"mouse" : "鼠标", "price": 10},
{"yacht" : "游艇", "price": 1999},
{"beauty" : "美女", "price": 1098},
]
buy_goods = []
user_money = input("请输入商品金额:")
for item in goods:
init_num = item
money = int(user_money)
#判断列表中 0 < 商品 <= 100 的商品
if 0 < money <= 100:
new_goods1 = goods[1]
buy_goods.append(new_goods1)
print("您可供购买的商品如下:")
print(buy_goods)
new_buy_goods1 =input("请输入购买商品:")
if new_buy_goods1 == new_goods1['mouse']:
print("成功加入购物车.\n您购买的商品如下:")
#判断列表中 100 < 商品 <= 1000 的商品
elif 100 < money <= 1000:
new_goods2 = goods[0]
buy_goods.append(new_goods2)
print("您可供购买的商品如下:")
print(buy_goods)
new_buy_goods2 = input("请输入购买商品:")
if new_buy_goods2 == new_goods2['computer']:
print("成功加入购物车.\n您购买的商品如下:")
#判断列表中 1000 < 商品 <= 2000 的商品
elif 1000 < money <= 2000:
new_goods3 = goods[2]
new_goods4 = goods[3]
buy_goods.append(new_goods3)
buy_goods.append(new_goods4)
print("您可供购买的商品如下:")
print(buy_goods)
new_buy_goods3 = str(input("请输入购买商品:"))
if new_buy_goods3 == new_goods3['yacht'] or new_buy_goods3 == new_goods4['beauty'] :
print("成功加入购物车.\n您购买的商品如下:")
#购买
for item in buy_goods:
print(item)
print("成功提交订单,您的商品已下单正在出库...")
#判断列表中 商品 > 2000 的商品
if money <=0 or money >= assets:
print("账户余额不足,请充值后购买.")
1 输入商品金额:
5. 三级联动
"""
3.用户交互,显示省市县三级联动的选择
dic = {
"河北":
{
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
}
"河南": {
...
}
"山西": {
...
}
}
"""
citys = {
"河南省":{
"郑州市": {
"金水区": ["金区一","金区二","金区三","金区四"],
"二七区": [],
"中原区": [],
"管城区": [],
"上街区": [],
"惠济区": [], } ,
"洛阳市": {
"瀍河区":["瀍区一","瀍区二","瀍区三","瀍区四"],
"洛龙区":[],
"吉利区":[],
"伊滨区":[], },
},
"河北省":{
"北京市": {
"海淀区":["海一区","海二区","海三区",],
"朝阳区":["朝一区","朝二区","朝三区"],
"望京区":["望一区","望二区","望三区"],
},#"丰台区","顺义区","石景山区","西城区","东城区","大兴区","昌平区","房山区","门头沟区","平谷区","密云区","延庆区","怀柔区"] ,
"保定市": {
"竞秀区":[],
"莲池区":[],
"满城区":[],
"清苑区":[],
"徐水区":[],},
},
"湖南省":{
"长沙市": {
"芙蓉区":["芙蓉一区","芙蓉二区","芙蓉三区"],
"天心区":[],
"岳麓区":[],
"开福区":[],
"雨花区":[],
"望城区":[], },
},
}
for item in citys.keys():
#查询省,存在:打印省下面所有的市。否则提示省不存在
inquire_province = input("请输入查询省份:")
ret = citys.get(inquire_province,None)
if ret is None:
print("%s Not found" % inquire_province)
continue
else:
# print(citys[inquire_province].keys())
centre_p = list(citys[inquire_province].keys())
for item in centre_p:
print(item)
#查询市,存在:打印省.市下面所有的区(县)。否则提示市不存在
inquire_centre1 = input("请输入查询市名:")
centrel = citys[inquire_province].get(inquire_centre1,None)
if centrel is None:
print("%s Not found" % inquire_centre1)
continue
else:
area_c = list(citys[inquire_province][inquire_centre1].keys())
for item in area_c:
print(item)
# 查询区,存在:打印省.市下面所有的区(县)。否则提示区不存在
inquire_area = input("请输入查询区名:")
# for item in list(citys[inquire_province][inquire_centre1].get(inquire_area,"区不存在.")):
area = citys[inquire_province][inquire_centre1].get(inquire_area,None)
if area is None:
print("%s Not found" % inquire_area)
continue
else:
for item in area:
print(item)
河南省联动: