zoukankan      html  css  js  c++  java
  • Python学习文件操作与集合

    一、文件操作

    现有以下文件test:

    文件基本操作:

    1 f = open(r'test',encoding='utf-8') #打开一个文件,默认为只读模式(r可以不写)
    2 # print(f.read()) #获取文件里面的所有内容
    3 # print('readline:',f.readline()) #读取文件第一行的内容,返回字符串对象
    4 # print('readlines',f.readlines()) #获取文件里面所有的数据,每一行的数据放到一个list里面
    5 
    6 f.close() #关闭文件

    1、打开文件的模式

    # r,只读模式(默认)。【只能读,不能写;文件不存在会报错】
    # w,只写模式。【不可读;不存在则创建;存在则覆盖以前文件的内容】
    # a,追加模式。【不可读; 不存在则创建;存在则只追加内容】
    # r +,【指针在最前面。可读、可写;可追加,如果打开的文件不存在的话,会报错】
    # w +,【写读模式,使用w + 的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
    # a +,【指针在最后面。追加读写模式,不存在则创建;存在则只追加内容;】
    #追加模式下,读和写的时候焦点始终在文件的末尾,除非使用函数seek()强制调整
    #只要沾上r,文件不存在肯定会报错 #只要沾上w,文件内容肯定会被清空 # rb 以二进制读模式打开,"b"表示处理二进制文件 # wb 以二进制写模式打开 # ab 以二进制追加模式打开

    2、读取文件的三个方法:read()、readline()、readlines()

    read()方法:

    1)读取整个文件的内容,将所有内容放到一个字符串变量中

    2)若文件大于可用内存,不可能使用这种处理

    readline()方法:

    1)readline()每次读取一行

    2)readline()返回的是一个字符串对象,保存当前行的内容

    readlines()方法:

    1)读取所有文件内容,返回一个list,元素是每行的数据,包括换行符

    2)大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆

    3、写操作

     常用的写入函数为write(str),writelines(list[str])

    1)写入的必须是字符串,writelines()写入字符串列表

    2)写入的内容不会自动添加换行符,必须显示写入换行符

    #
    # f = open(r'test', 'w',encoding='utf-8')
    # f.write("test")
    
    #追加
    names = ["xx","dd","hh"]
    f = open(r'test', 'w',encoding='utf-8')
    f.writelines(names) #传一个list,然后把list里面的每一个元素写入到文件中

    4、文件其他操作方法

    f = open('test', 'r+', encoding='utf-8')  # encoding参数可以指定文件的编码
    f.tell()#获取当前文件的指针指向
    f.seek(0)#把当前文件指针指向哪
    f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中(缓冲区:内容写的数据放在缓冲区,缓冲区满了后再写入到磁盘)
    f.truncate()#清空文件内容
    f.close()#关闭文件

    5、读取文件的高效方法

    read()和readlines()方法操作文件,会先把文件所有内容读到内存中。这样的话,内存数据一多会非常卡。高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

    f = open('test',encoding='utf-8')
    
    for line in f:  #直接循环文件对象,每次循环的时候就是取每一行数据
        print('line:',line)  #这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存

    6、自动关文件(使用with)

    使用with,它会在使用完这个文件后自动关闭该文件,使用方式如下:

    #with 自动关文件
    with open('test','r+') as f:
        f.read()
        f.write('uuuuuuu')
    #
    # #打开多个文件,用逗号隔开
    # with open('test','r+') as f,open('test1','w',encoding='utf-8') as fw:
    #     f.read()

    7、文件修改(两种方式)

    第一种:简单粗暴直接

    1)先获取到文件里面所有的内容

    2)然后修改内容

    3)清空原来文件里面的内容

    4)重新写入

    f = open('test','a+',encoding='utf-8')
    f.seek(0)
    data = f.read() #文件指针到了最后
    new_data = data.replace('','you')
    f.seek(0)
    f.truncate() #清空文件内容
    f.write(new_data)
    f.flush()
    f.close()

    第二种:高效的方法

    1)先打开原来的文件,再打开一个空文件
    2)循环处理原来文件里面每一行数据,处理完之后,写到新文件里面
    3)把原来的文件删除,把新文件的名字改成原来文件的名字

    #1、前面的空格
    #2、把空行去掉
    #3、你替换you
    #4、写到新文件里
    #5、把原来的文件删除,把新文件的名字改成原来文件的名字
    import os
    with open('test',encoding='utf-8') as fr,open('.test','w',encoding='utf-8') as fw:
        for line in fr:  #循环文件,读取每一行
            line = line.lstrip()  #去掉每一行的左边的空格
            if line:   #判断此行是否为空,不为空继续进行后面的操作
                new_linel = line.replace('','you')
                fw.write(new_linel)
    os.remove('test')
    os.rename('.test','test')

    二、集合(set)

    集合也是一种数据类型,类似列表。

    特点是无序、不重复(集合中没有重复的数据)

    集合的作用:

    1)可以直接去掉列表中重复的数据

    2)可以做关系测试。比如有画画和跳舞两个班,想找出画画和跳舞都学习了得人,就可以用集合

    1、集合的定义

    创建一个set,用{ }直接定义或使用set()传入一个list参数:

    list = [1,2,3,4,5,3,6]
    set1 = set(list)    #使用set()定义集合
    set2 = set([1,7,8,9,0])  #把list转化为一个集合
    set3 = {'beijing','shanghai','guangzhou'}  #直接定义一个集合
    print(set1,set2)

    如图打印出的结果说明:集合天生去重、无序

    2、集合操作

    nums = {6,7,1,2,3,4,5}
    num2 = {1,8,7,12}
    #交集:取两个集合中都有的
    print(nums.intersection(num2) )
    print(nums & num2)
    
    #并集:合并到一起之后,再去重
    print(nums.union(num2))
    print(nums|num2)
    
    #差集:取出在nums中存在,在num2里面没有
    print( nums - num2 )
    print(nums.difference(num2))
    
    #对称差集:输出nums和num2中都没有的值,也就是把两个集合中相同的去掉
    print(nums.symmetric_difference(num2))
    print(nums ^ num2)
    
    #子集、父集
    print(num2.issubset(nums))  #判断num2是不是nums的子集(num2的值在nums中全有)
    print(nums.issuperset(num2)) #判断nums是不是num2的父集
    
    print(nums.isdisjoint(num2)) #判断nums和num2是否有交集

    增删改操作:

    增加:add()  update()

    删除:remove()  pop()  discard()

    print('---------集合操作--------')
    list.add(777)           #增加,一次只能添加一个
    list.update([888,999])  #增加:可同时添加多个
    
    list.remove(999)    #删除不存在的元素,会报错
    list.pop()          #删除一个随机的元素,并返回删除的元素
    list.discard(888)   # 删除一个不存在的元素 不会报错
  • 相关阅读:
    Linux下安装配置词典GoldenDict
    ubuntu 安装LaTex
    ubuntu 安装Opencv2.4.7
    Ubuntu 安装Matlab2010a
    Ubuntu 挂载ISO文件的方法
    ubuntu安装Java jdk1.7.0
    VDI转vmdk(VirtualBox与VMware硬盘格式转换)[转]
    oracle忘记密码,修改密码,解锁
    SQL Server 2008中文企业版下载地址和序列号[转]
    HTTP 错误 500.19 – Internal Server Error web.config 文件的 system.webServer/httpErrors 节中不允许绝对物理路径“C:inetpubcusterr”[转]
  • 原文地址:https://www.cnblogs.com/ddxxn/p/9222065.html
Copyright © 2011-2022 走看看