Python【基础学习】第二篇-3节

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方法技巧:
列表 join .JPG
  • 下列为文件 回写数据图片库

    1创建的文件:
    1 文件原数据.JPG

2列表 格式化文件数据:
2 列表格式化数据.JPG

3更新数据回写:
3 更新数据回写完成.JPG

4文件追加更新数据:
4 回写 更新文件数据.JPG
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创建的文件:
    1 文件原数据1.JPG

2 字典格式化文件数据:
2 字典格式化 文件数据2 .JPG

3更新数据回写:
3 更新数据回写完成3.JPG

4文件追加更新数据:
4 回写 更新文件数据4 .JPG
4 回写 更新文件数据42 .JPG
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运行结果:
new_sort_val.JPG
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 输入商品金额:
34 鼠标.JPG

2 请输入购买商品:
购买鼠标.JPG

3 余额不足:
余额不足,请充值后购买.JPG
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)
            

河南省联动:
河南联动2 .JPG

你可能感兴趣的:(Python【基础学习】第二篇-3节)