python基础---文件的读写操作及装饰器和闭包

本文详细介绍了Python中字典的高级操作,包括如何通过函数在字典中添加元素,以及深入探讨了文件的读写操作,如打开、读取、写入和关闭文件的过程。此外,还讲解了文件的偏移读取、追加写入及文件路径操作等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#用函数在字典里添加元素。
a={
    '001':{'name':'张三','age':'18','adress':'北京'},
    '002':{'name':'张二','age':'28','adress':'上海'},
    '003':{'name':'张大','age':'38','adress':'北京'},
    '004':{'name':'张四','age':'28','adress':'上海'},
    '005':{'name':'张六','age':'38','adress':'北京'}
}
def modify():
    number=input("请输入学号:")
    if number in a.keys():
        print('学号重复')
    else:
        zd={}
        zd['name']=input("请输入姓名:")
        zd['age']=input("请输入年龄:")
        zd['address']=input("请输入地址:")
        a[number]=zd
modify()
print(a)
for k in a.keys():
    print(k,a[k])

#写操作。
f=open('E:\\a.txt','w')#打开一个文件以只写的方式,叫a.txt,路径在E盘下
#f.write("非的次个非想")
f.close()
f=open('a.txt','w')#直接把a.txt保存在work.py中。
f.write('12345')
f.close()

#读操作。
f=open('a.txt','r')#想输出中文最好将文件保存在路径中。或者r后面加encoding='utf-8'
content=f.read(4)#加数字表示只读n个字符。不加数字时全读。
#content1=f.readline()#以行为单位读取。只读一行
print(content)
#print(content1)
f.close()

f=open('a.txt','r')
content=f.readlines()#以列表形式输出所有行
print(content)
f.close()

f=open('a.txt','w',encoding='utf-8')
f.write('北京')
f.write('\n')
f.write('南京')
f.close()

f=open('a.txt','a',encoding='utf-8')#表示在已有的内容后面追加
f.write("成都")
f.close()

f=open('a.txt','r')
print(f.tell())#没读的时候光标在字符前,所以位置是0.
x=f.read(4)#读取4个字符
print(x)
print(f.tell())#此时位置在4的后面
f.close()

f=open('a.txt','r')
f.seek(2,0)#第一个参数代表偏移的字符数,第二个参数是从哪个地方开始偏移。0,开头,1,中间,2,末尾。
x=f.read(4)
print(x)
f.close()

import os
os.rename('a.txt','c.txt')#将a重命名。

#删除文件:os.remove(文件地址)
#os.mkdir('daf',0x777)创建一个名为daf的文件,权限:第一个7为自身权限,第二个7为同组权限。
#p=os.getcwd() print(p)得到当前的工作目录。
#os.remir(文件夹名称):删除当前文件夹
#b=os.path.exists(文件名称):判断文件是否存在,返回布尔值。

import os
os.makedirs('a\\b\\c')#创建多层文件夹。
#深拷贝与浅拷贝区别:
import copy
a=3
b=3
print(id(a)==id(b))

a=3
b=a
print(id(a)==id(b))

a=[1,2,3]
b=[1,2,3]
print(id(a))#id不同。
print(id(b))

c=a
print(id(a)==id(c))
c.append(4)#a,c指向同一地址,改变a就是改变c。
print(a)

a=3
b=a
a=4
print(a,b)#返回a=4,b=3

a=3
b=copy.copy(a)
c=copy.deepcopy(a)
print(id(a)==id(b)==id(c))#三个地址相同:不可变型的copy不改变地址。

import copy
a=[1,2,3]
b=a
c=copy.copy(a)
d=copy.deepcopy(a)
print(id(a)==id(b))
print(id(a)==id(c))#可变类型的拷贝指向不同的地址。
print(id(a)==id(d))

a=[1,2,3,[10,20,30]]
b=copy.copy(a)
c=copy.deepcopy(a)
a.append(0)#改变第一层内容不影响,因为拷贝的内容已与其无关
print(b)
print(c)
print(id(a[3]))
print(id(b[3]))
a[3][2]=9#浅拷贝只拷贝一层内容,【10,20,30】的地址还是指向同一地址,改变时必会同时改变。
print(b)
print(c)
#迭代器。
import copy
a=(1,2,3)
b=iter(a)#迭代器。for 中自带迭代。
print(type(b))
print(next(b))
print(next(b))
print(next(b))
#生成器。
def func(n):
    i=0
    while i<n:
        yield i#遇见yield,在运行的时候:next(a)直接跳到此步骤运行。可以节省内存空间,一次只产生一个数并且保存上一个数。
        i+=1
a=func(1000)
print(next(a))
print(next(a))
print(next(a))

#使用生成器做斐波那契数列。
def fib(n):
    a,b=0,1
    i=0
    while i<n:
        a, b = b, a + b
        yield a
        i+=1
f=fib(9)
for x in f:
    print(x)

def a(b):
    b()
def x():
    print("123")
a(x)#将函数名x传给参数b,则b()就相当于x(),相当于调用函数x。
#装饰器。
import time
def hx(f):#装饰器函数,f接受被装饰的函数名
    def neibu():#装饰内部函数
        start=time.time()
        f()#调用被装饰函数
        end=time.time()
        print(end-start)
    return neibu#装饰器返回内部函数(内部代表包装盒)。
@hx#@加函数名代表下面的函数被装饰。相当于hx(js())
def js():
    print("12345")
js()

def decor(func):
    def neibu(x):
        print("****")
        func(x)
        print("****")
    return neibu
def decor2(func):
    def neibu(x):
        print("####")
        func(x)
        print("####")
    return neibu
@decor2#decor2又把decor套了一层。双层装饰器。
@decor
def fun(name):#整个函数是第一层函数的参数。
    print(name,"1243")
fun("qwe")
'''
#闭包。  (装饰器就是一种闭包)闭包三要素:
def fun1(b):#1.包含内部函数的函数。
    a=3
    def fun2(c):
        d=a*b+c#3.内部函数使用了外部函数的变量。
        return d
    return fun2#2.返回内部函数名。
x=fun1(4)
print(x(5))
print(x(6))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值