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 列表格式化數據.JPG
3 更新數據回寫完成.JPG
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 .JPG
3 更新數據回寫完成3.JPG
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
購買鼠標.JPG
余額不足,請充值后購買.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