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簡介和環境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,808評論 0 10
  • 定義類并創建實例 在Python中,類通過 class 關鍵字定義。以 Person 為例,定義一個Person類...
    績重KF閱讀 3,971評論 0 13
  • 一、快捷鍵 ctr+b 執行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,858評論 2 16
  • 寫于開學第一周 開學已經一個禮拜了,在等輕軌去某個地方的空閑時間,我寫下這篇文章記錄過去的這個寒假。 寒假,是作為...
    IFJuly閱讀 477評論 0 1
  • 林微微失戀了。就在她20歲生日的當天。那天晚上她精心打扮,坐在男朋友徐逸塵的對面,西餐廳里燭光搖曳,浪漫的背景音樂...
    cici2cici閱讀 722評論 0 50