python基础-day08

讲讲昨天

s = 'abdf$'
s1 = s[:]
print(id(s),id(s1)) #运行结果:2429113184696 2429113184696
#切片的浅拷贝在这里不适用,和小数据池没关系

深浅拷贝的一个特殊例子

li = [{'1':[1]}]
l2 = li.copy()
l2[0]['1'].append(2)
print(li)
print(l2)
#字典的值是列表,这个列表是第二层,copy管不了这么深,
#运行结果
# [{'1': [1, 2]}]
# [{'1': [1, 2]}]


接下来,讲解文件操作,

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
    pass
#源码讲解的东西太多,而且有些是太靠后的内容,暂时就不贴那么多了,
#首先是打开的文件在哪里,
#这里由于路径涉及\这个符号,即转义的问题,所以要记得r'C:\my.txt'和C:\\my.txt这两种形式,
# 相对绝对路径问题就pass了,
#**************************
#然后是encoding的问题,windows下默认以gbk的方式打开,linux下默认以utf-8的形式打开,
# 而对于以b方式打开的,就不需要指定encoding,b的形式主要是因为除了文字还有视频,图片等非文字格式,
#**************************
#对于mode,基本模式有r,w,a,
#在此基础上还有b,+,
#组合效果有r+,w+,a+,r+a,w+a,
#如果你弄不清组合情况之间的区别,去看看内部教材95页第一个问题,
#暂时就举一个r+的例子,
f = open("./boy", encoding="utf-8", mode="r+")      #文件里面内容是AAAAAAAAAAAA
f.write('BBB')      #按理说,r+是不能先写的,我们就是要先write,看会出什么错,
content = f.read()
print(content)      #打印结果是AAAAAAAAA,比之前A的数量少了3个A,
# f.write('aaa')
f.close()           #关闭文件之后,文件内的内容是BBBAAAAAAAAA,相当于前3个A都被替换为了B,

#打开之后,就该读取文件的内容了,
read(),是一次读取整个文件,坏处就是如果文件特别大,你的内存可能不够,
readline(),一次读取文件一行的内容,
readlines(),将文件内容读取进列表,列表中的每个元素存储一行内容,
read(n),还可以设定读取的数量,如果是b模式,这里n的单位就是字节,如果非b的模式,这里n的单位就是字符,
for i in f:#这是第五种,
    print(i.strip())
f.close()
#关于r+ 的二次解释
f = open("./boy", encoding="utf-8", mode="r+")
content = f.read(5)         #文件内容大于5个字符,
print(content)
print(f.tell())             #此时的位置,还和前面的一致,是5
f.write('SSS')              #此时write是从最后开始写,
print(f.tell())             #这时候的位置大概是字母SSS那,具体数值和你数的字符数不一样,可能是因为换行符的原因吧,
f.close()

w+有点鸡肋,因为首先就会清空原来的文件,这时你再读就是空,无意义,然后你就算读,也是你自己刚写入的内容。

a+的意义对于读来说没什么意义,因为直接就在最后,你读就是读空气;对于写还是有用的;


再讲几个其它的文件操作方法,

        tell()    #告诉当前位置,
        seek()    #设定光标位置
        truncate()    #截取一部分,然后扔掉,只能用在a模式。不设定,就从当前位置到最后全部删掉;设定的话,从开头到设定位置的保留。
        writable()    #判断文件是否可写
        readable()    #判断文件是否可读


使用with的方式操作文件,1自动关闭文件,2可以同时操作多个文件,

# 1,将原文件读取到内存。
# 2,在内存中进行修改,形成新的内容。
# 3,将新的字符串写入新文件。
# 4,将原文件删除。
# 5,将新文件重命名成原文件。
import os
with open('log',encoding='utf-8') as f1,\
    open('log.bak',encoding='utf-8',mode='w') as f2:
    content = f1.read()
    new_content = content.replace('alex','SB')
    f2.write(new_content)
os.remove('log')
os.rename('log.bak','log')

import os
with open('log',encoding='utf-8') as f1,\
    open('log.bak',encoding='utf-8',mode='w') as f2:
    for i in f1:
        new_i = i.replace('SB','alex')
        f2.write(new_i)
os.remove('log')
os.rename('log.bak','log')

补充:

1.注意使用in use mode of b,中文不同编码占用字节数是不同的,如果移动文件光标注意弄清,

2.读写操作公用一个光标,

3.重点操作,r,r+,w,a,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值