• f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读,
  • 在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open
  • frist_line = f.readline()#获取文件的第一行内容,返回的是一个list
  • print(frist_line)#打印第一行
  • res = f.read()#获取除了第一行剩下的所有文件内容,文件句柄发生了变化
  • print(res)
  • f.close()#关闭文件
  • 2.文件打开模式:

        r:只读,不加模式默认为r
        w:只写,[不可读,不存在则创建,存在则删除内容]
        a:追加,[不可读,不存在则创建,存在则只追加内容]
    "+" 表示可以同时读写某个文件
        r+ :读写--可读、可写、可追加,如果打开的文件不存在的话,会报错
        w+ :写读--先创建文件,再写(在原文件上的修改都是覆盖操作)
        a+ :追加读--默认打开句柄在末尾,读取需先seek(0)指定位置,一写句柄就到末尾了
        #r和w,seek指定句柄可以覆盖修改,a+指定句柄也是追加
    "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
        # windows上换行符为 \r\n
    "b"表示处理二进制文件
        rb:二进制文件读
        wb:二进制文件写
        ab:追加二进制
    # 文件存在硬盘上都是二进制,前边说encoding='utf-8'是指把二进制转换成utf-8编码打开,
    # 而“b”是指,不用转换编码,我直接读取二进制

    3.文件操作:

    f = open("1.txt", 'r', encoding="utf-8")
    # encoding="utf-8",utf-8编码打开文件,windows下默认gbk打开
    f.readline()            # 读一行,字符串
    f.readable()            # 判断文件是否可读
    f.writable() # 判断文件是否可写
    f.encoding() # 打印文件的编码
    f.read() # 读取文件句柄到结束所有内容,大文件时不要用,因为会把文件内容都读到内存中
    f.readlines() # 读取文件所有内容,返回一个list,元素是每行的数据,大文件时不要用 f.write("天安门") # 写入内容,r和w模式,为句柄处覆盖写入,a模式写到最后
    f.writelines(['zhangsan'],['李四']) #将一个列表写入文件中 f.flush() # 强制刷新(默认缓冲区满了存入磁盘) f.close() # 文件关闭 f.closed() # 判断文件是否关闭 f.read(5) # 读取5个字符 f.tell() # 查看文件句柄位置。按照字符计数 f.seek(0) # 移动文件句柄到第0个字符位置 f.encoding # 文件编码 f.truncate() # 什么不写清空文件 f.truncate(10) # r模式截断出前10个字符,其他模式还是清空

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

    f = open('file.txt')
    for line in f: # f 变成了迭代器
      print(line) # 判断行的话,需自己加个计数器

    4.文件内容修改
    前面说的文件修改,只是对原内容覆盖,并不会插入内容,原内容往后移,因为这样有可能就把其他文件覆盖了,文件发生损坏。so:
    文件修改两个办法:
    1. 加载到内存,内存修改,覆盖写回
    2. 另打开一个文件,修改完写到新文件中

    with open("test", 'r+', encoding='utf-8') as fr
       res = fr.read()
      new_res = res.replace('我','me')
      fr.write(new_res)
    with open("test", 'r', encoding='utf-8') as f, \
        open("test.tmp", 'w', encoding='utf-8') as f_new:
        for line in f:
            if "聚焦头条" in line:
                line = line.replace("聚焦头条","fgf")
            f_new.write(line)
    # os.path.exists("test.bak")  判断文件是否存在
    # os.remove("test.bak")       删除文件
    # os.rename(test.tmp, test)   重命名

    5.文件关闭(with语句)
    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    with open('log') as f:
    

    如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。 
    Python 2.7 后,with又支持同时对多个文件的上下文进行管理

    集合也是一种数据类型,一个类似列表的东西,特点是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
  • set_1.issubset(set_2) #判断set_1是不是set_2的子集 set_1.issuperset(set_2) #判断
    set_1是不是set_2的父集
    对称差集:(并集去除交集,即并集和交集的差集) 输出2个列表都没有的值
      set_1.symmetric_difference(set_2) 即(set_1 | set_2) - (set_1 & set_2)
    set_1 ^ set_2
    判断有没有交集,无交集,返回True
      set_1.isdisjoint(set_2)

    2、符号操作

        & : 交集        intersection
        | :并集        union
        - :差集        difference
        s <= t :子集   issubset
        s >= t :父集   issuperset
        ^ :对称差集    symmetric_difference

    3、集合增删改查

    set_1.add( 99) set_1.update([ 1, 2, 3, 4]) set_1.remove( 'h') # 没有则报错 set_1.discard( 99) # 在则删除,不在就不操作。无返回信息 set_1.pop() len( set_1) 是否属于判断 s in set_1 # (判断成员在不在都是这么写,字典中判断key) 返回 set “s”的一个浅复制 s.copy()