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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,737评论 0 10
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 3,940评论 0 13
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,803评论 2 16
  • 写于开学第一周 开学已经一个礼拜了,在等轻轨去某个地方的空闲时间,我写下这篇文章记录过去的这个寒假。 寒假,是作为...
    IFJuly阅读 444评论 0 1
  • 林微微失恋了。就在她20岁生日的当天。那天晚上她精心打扮,坐在男朋友徐逸尘的对面,西餐厅里烛光摇曳,浪漫的背景音乐...
    cici2cici阅读 703评论 0 50