首页 > 代码库 > python15-day03 文件的基本操作

python15-day03 文件的基本操作

1. 字典

1.1 字典的定义

字典是key-value结构

key的定义规则:

1. 必须是不可变的,数字、字符串、元组是不可变的,列表和字典中的元素是可变的,可hash的类型可以作为字典的key,不可hash的不可以作为字典key值。

dic1 = {1:"liangkai"}
dic2 = {"name":"liangkai"}
dic3 = {(1,2,3):"liangkai"}
print(dic1.get(1))
print(dic2.get("name"))
print(dic3.get((1,2,3)))

 

key值可以是数字、字符串、元组,取值时,key是什么形式就取什么形式。

2. 唯一性

key值是唯一的,如果一个字典有多个key值,执行程序不会报错,但是取值时只会返回一个value值。

value的定义规则:

1. 可以是任意类型数据

1.2 字典的操作

1.2.1 增删改查

#字典定义方法

dic = {
    name:liangkai,
    age:26
    }
dic1 = dict(name,"liangkai")
print(dic1)
dic2 = dict((name,liangkai),("age","18"))
print(dic2)

#增,字典是无序的,key值是唯一的

dic["genger"] = female
print(dic)

#

del  dic["name"]
print(dic)

 

#,key值是无法更改的

dic[name] = kaige
print(dic)


#查,可以使用中括号的方法,或者get方法,get方法不会出现报错,如果没有key,会返回none

print(dic[name])
print(dic.get(name))

 

1.2.2 字典内置方法

#快速生成字典,同一个value值,不同的key,这样的key值指向同一块内存地址,一个改全改

dic1 = dict.fromkeys(["liangkai","kaige"],1)
print(dic1)

 

#将每一项改成元组,以列表的形式输出

print(dic1.items())
for k,v in dic1.items():
    prin(k,v)

 

#把所有的key以列表的形式输出,可以循环key值,打印value

print(dic1.keys())
for i in dic1.keys():
    print(i,dic1[i])

#把所有的value值以列表的形式输出

for i in dic1.values():
    print(i)

 

#删除某个key-value对,key值必须存在,否则删除报错

#dic1.pop()

#随机删除某个键值对

dic1.popitem()
#插入一个键值对
dic1.setdefault("sex","fomale")
print(dic1)
dic1.setdefault("name",[]).append(kaige)
print(dic1)


#两个字典的更新,结合,存在则更新,不存在则创建

dic1.update()
dic1.update(name= "kai")
print(dic1)

#复制,浅copy,只能copy第一层

dic1.copy()

#深copy,导入copy模块

dic3 = copy.deepcopy(dic1)
print(dic3)

1.3 三级菜单

1.3.1 简单逻辑版

# _*_ coding:utf-8 _*_
# Author :kaige
menu = {
    北京:{
        海淀:{
            五道口:{
                soho:{},
                网易:{},
                google:{}
            },
            中关村:{
                爱奇艺:{},
                汽车之家:{},
                youku:{},
            },
            上地:{
                百度:{},
            },
        },
        昌平:{
            沙河:{
                老男孩:{},
                北航:{},
            },
            天通苑:{},
            回龙观:{},
        },
        朝阳:{},
        东城:{},
    },
    上海:{
        闵行:{
            "人民广场":{
                炸鸡店:{}
            }
        },
        闸北:{
            火车战:{
                携程:{}
            }
        },
        浦东:{},
    },
    山东:{},
}
while True:
    for n in menu:
        print(n)
    name_level1 = input("请输入一级城市名称:")
    if name_level1 == "quit":
        exit()
    elif name_level1 == "b":
        break
    elif name_level1 not in menu :
        print("输入不存在,请重新输入")
        continue
    else:
        while True:
            for n in menu[name_level1]:
                print(n)
            name_level2 = input("请输入二级城市名称:")
            if name_level2 == "quit":
                exit()
            elif name_level2 == "b":
                break
            elif name_level2 not in menu[name_level1] :
                print("输入不存在,请重新输入")
                continue
            else:
                while True:
                    for n in menu[name_level1][name_level2]:
                        print(n)
                    name_level3 = input("请输入三级城市名称:")
                    if name_level3 == "q":
                        exit()
                    elif name_level3 == "b":
                        break
                    elif name_level3 in menu[name_level1][name_level2]:
                        for n in  menu[name_level1][name_level2][name_level3]:
                            print(n)
                    else:
                        print("输入不存在,请重新输入")
                        continue
                    while True:
                        choice = input("请选择操作,b返回上一级,q退出")
                        if choice == "q":
                            exit()
                        elif choice == "b":
                            break
                        else:
                            print("输入错误,请重新输入")
                            continue

 

1.3.2 优化版

# _*_ coding:utf-8 _*_
# Author :kaige
menu = {
    北京:{
        海淀:{
            五道口:{
                soho:{},
                网易:{},
                google:{}
            },
            中关村:{
                爱奇艺:{},
                汽车之家:{},
                youku:{},
            },
            上地:{
                百度:{},
            },
        },
        昌平:{
            沙河:{
                老男孩:{},
                北航:{},
            },
            天通苑:{},
            回龙观:{},
        },
        朝阳:{},
        东城:{},
    },
    上海:{
        闵行:{
            "人民广场":{
                炸鸡店:{}
            }
        },
        闸北:{
            火车战:{
                携程:{}
            }
        },
        浦东:{},
    },
    山东:{},
}

last_level = []
menu_choice = menu
while True:
    for key in  menu_choice: print(key)
    choice = input(">>>>:")
    if choice == "b":
        if len(last_level) == 0: break
        menu_choice = last_level[-1]
        last_level.pop()
    elif choice == "q": exit("退出成功")
    elif choice not in menu_choice:
        print("输入不存在,请重新输入")
        continue
    else:
        last_level.append(menu_choice)
        menu_choice = menu_choice[choice]

 

2. 集合

定义:有不同元素组成的集合

2.1 基本操作

set1 = {1,2,5,7,8,4,10}
set2 = {2,4,6,8,10}
set3 = {6,8}
#交集
print(set1.intersection(set2))
#并集
print(set1.union(set2))
#差集
print(set1.difference(set2))
print(set2.difference(set1))
#对称差集
print(set1.symmetric_difference(set2))
print(set2.symmetric_difference(set1))
#子集
print(set3.issubset(set2))
#父集
print(set2.issuperset(set3))

 

去掉交集部分,剩下的元素

2.2 集合内置方法

s1 ={1,2,3,4}
s2 = {"a","b","c",2,4}
#更新
s1.update(s2)
print(s1)
#增加
s1.add("hello")
print(s1)
#随机删除
print(s1.pop())
print(s1)
#指定删除,如果元素不存在,返回错误
s1.remove("hello")
print(s1)
#第二种删除方法,如果元素不存在不返回错误
s1.discard("a")
print(s1)

 

3. 字符编码

1. 内存固定使用unicode编码,硬盘的编码(即可以修改的软件编码)

2. 使用什么编码往硬盘存,就用什么编码去读。

3. 程序运行分两个阶段:

  • 从硬盘读取到内存
  • python解释器运行读到内存的代码

4. 针对一个test.py来说,pycharm与nodepad++的区别是多了3中的第二步。

5. 代码头部的编码只是告诉程序从硬盘读到内存使用什么编码。

4. 文件操作

#读文件,打开文件后需要赋值给一个变量,避免每次都要打开

‘‘‘
f = open("test1")
count = 0
while count<5:
    print(f.readline().strip())
    count += 1
#一行行的读
‘‘‘
‘‘‘
f = open("test1")
line_nu = 0
for line in f:
    if line_nu < 4:
        print(line.strip())
        line_nu +=1
    else:
        break
‘‘‘

 

#写文件
# w是创建写模式的文件,无论是否存在都会重新创建
# a是追加模式
# r是读模式,默认打开是读模式
# r+ 读写
# w+ 写读,先以写的模式打开,清空文件内容
# a+ 追加读,追加到最后,跟r+效果一样

f = open("myfile","w+")
f.write("你好")
f.write("kaige")
f.close()

 

#将一个列表的值写到文件中
f.writelines()

#判断文件是否已经关闭,返回布尔类型
f.closed

#打印文件的编码格式
f.encoding

#刷新内存数据到硬盘
f.flush()

#判断是不是tty文件,tty文件是不可读的,很少用
f.isatty()

#判断文件是否可读
f.readable()

#移动指针到特定文件位置(以字符为单位)
f.seek()

#查看文件是否可seek
f.seekable()

#查看当前指针所在位置
f.tell()

#指针位置后边全部截断,可以指定长度截断,删除
f.truncate()

 

 

python15-day03 文件的基本操作