深浅拷贝&文件操作

Posted wenxin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅拷贝&文件操作相关的知识,希望对你有一定的参考价值。

一.深浅拷贝

  浅拷贝:拷贝第一层(顶级对象),或者说:父级对象

  深拷贝:拷贝所有对象,顶级对象及其嵌套对象,或者说父级对象及其子对象

# 应该每次都拷贝一份(但由于小数据池,未拷贝)
v1 = alex
import copy
v2 = copy.copy(v1)
print(id(v1),id(v2))     #同一地址    
练习1
impot copy
v1 = [1,2,3]
v2 = copy.copy(v1)   #浅拷贝
print(v1 == v2)  # True
print(v1 is v2)  # False
print(v1[0] is v2[0])  # True
练习2
 import copy
v1 = [1,2,3,{"name":‘武沛齐‘,"numbers":[7,77,88]},4,5]
v2 = copy.copy(v1)
print(v1 is v2) #False
print(v1[0] is v2[0]) #True
print(v1[3] is v2[3]) #True
print(v1[3][‘name‘] is v2[3][‘name‘]) #True
print(v1[3][‘numbers‘] is v2[3][‘numbers‘]) #True
print(v1[3][‘numbers‘][1] is v2[3][‘numbers‘][1]) #True

 

练习3
import copy
v1 = [1,2,3,{k1:123,k2:456}]
v2 = copy.deepcopy(v1)
print(v1 == v2) # True
print(v1 is v2) # False
print(v1[0] is v2[0]) # True
print(v1[3] == v2[3]) # True
print(v1[3] is v2[3]) # False
练习四
import copy v1 = [1,2,3,{"name":‘武沛齐‘,"numbers":[7,77,88]},4,5] v2 = copy.deepcopy(v1) print(v1 is v2) #False print(v1[0] is v2[0]) #True print(v1[3] is v2[3]) #False print(v1[3][‘name‘] is v2[3][‘name‘]) #True print(v1[3][‘numbers‘] is v2[3][‘numbers‘]) #False print(v1[3][‘numbers‘][1] is v2[3][‘numbers‘][1]) #True

 

二.文件操作

  1. 读取: r (read):只能读不能写,文件不存在就报错

 

#打开文件:
    object = open(某txt文件,mode = r,encoding = utf-8)

#读取内容:
    content = object.read()
    print(content)

#关闭内容:
    object.close()

  2. 写入:w (write): 只能写不能读(先清空文件),文件不存在就新建

#打开文件:
    object = open(某个txt文件或要新建的文件,mode = w,encoding = utf-8)

#写内容:
    object.write(xxx)

#关闭文件:
    object.close()

  3.追加; a (append): 只能追加不能读,不存在则新建

#打开文件:
    object = open (某个txt文件或要新建的文件,mode = a,encoding = utf-8)

#写内容:
    object.append()

#关闭文件
    object.close()

 

 

三.文件可读写:

  1.可读可写

读取
#写入:根据光标的位置,从当前光标位置开始进行写入操作(可能会将其他的文字覆盖)

file_object = open(某个txt文件,mode=r+,encoding=utf-8)
file_object.seek(2) # 调整光标的位置(根据字节来调整)

#读取内容:
content = file_object.read()
print(content)
file_object.write(xxx)

#关闭文件:
file_object.close()

  2.可读可写

object = open (某个txt文件,mode = w+,encoding = utf-8)
data = object.read()
print(data)

object.write(xxx)
object.seek(0)
data = object.read()
print(data)

file_object.close()

 

 

四.读写操作

  1.读:

file_object = open(某个txt文件,mode=r,encoding=utf-8)
# 读取文件的所有内容到内存
    con = file_object.read()

#从当前光标所在的位置向后读取文件两个字符
    con = file_object.read(2)

# 读取文件的所有内容到内存,并按照每一行进行分割到列表中。
    data_list = file_object.readlines()

# 如果以后读取一个特别大的文件 (**********)
    for line in file_object: 
         line = line.strip()  # strip : 去除换行(
)
         print(line)     #一行一行进行读取

 

  2.写:

file_object = open(log.txt,mode=w,encoding=utf-8)
file_object.write(asdfadsfasdf
)
file_object.write(asdfasdfasdfsadf)
file_object.close()

 

 

五.练习:

  1.请将user中的元素根据 _ 链接,并写入 ‘a1.txt‘ 的文件

    user = [alex,eric]
    data = _.join(user)
    object = open(a1.txt,mode = w,encoding = utf-8)
    object.write(data)
    object.close()

  2.请将user中的元素根据 | 链接,并写入 ‘a2.txt‘ 的文件

    user = [
    {name:alex,pwd:123},   
    {name:eric,pwd:olbody},]
    object = open(a2.txt,mode = w,encoding = utf-8)
    for item in user:
        line = %s|%s
 %(item[name],item[pwd])
        object.write(line)
     object.close()

 

  3.请将a2.(根据2)txt中的文件读取出来并添加到一个列表中 [‘alex|123‘,‘eric|olbody‘]

方法一:
    list = []
    objecct = open(a2.txt,mode = r,encoding = utf-8)
    for line in object:
       line = line.strip()
       list.append(line)
     print(list)
    
 方法二:
      file_obj = open(a2.txt,mode=r,encoding=utf-8)
    content = file_obj.read()
    file_obj.close()
    content = content.strip() #去除最后一个换行
    data_list = content.split(
) #根据中间的换行进行切割
    print(data_list)

 

以上是关于深浅拷贝&文件操作的主要内容,如果未能解决你的问题,请参考以下文章

python 深浅拷贝&集合

python 深浅拷贝,集合 ,小数据池 操作

集合深浅拷贝文件操作(读写追加)函数初识(参数)

python闭包&深浅拷贝&垃圾回收&with语句

8.6(数据类型分类,python深浅拷贝,异常处理,基本的文件操作,绝对路径和相对路径)

89.赋值重载以及深浅拷贝