zoukankan      html  css  js  c++  java
  • python-笔记(三)文件操作

    文件的操作一般分三步:

    1、打开文件,获取文件的指针(句柄)

    2、通过指针(句柄)操作文件

    3、关闭文件

    现在有以下文件:

            我们为爱还在学 
            学沟通的语言
            学着谅解
            学着不流泪  
            等到我们学会飞
            飞越黑夜和考验
            日子就要从孤单里毕业
            我们用多一点点的辛苦
            来交换多一点点的幸福 
            就算幸福
            还有一段路   
            等我们学会忍耐和付出
            这爱情一定会有张证书
    

      文件的基本操作:

    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()#关闭文件

    打开文件需要指定文件打开的路径,以及打开的方式,打开后就可以获取文件的句柄对文件进行操作
    文件的打开模式:
        #r模式,默认的模式,读文件内容,不能写,并且文件必须存在不存在就报错
    #w写模式,不能读,没有就创建,会先清空文件内容然后重新写
    #a追加模式,只能写,在文件的末尾添加内容
    ‘+’号表示可以同时读写文件
           # r +,【可读、可写;可追加,如果打开的文件不存在的话,会报错】
    # w +,【写读模式,使用w + 的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
    # a +,【追加读写模式,不存在则创建;存在则只追加内容;】
    #总结:只要是读模式文件必须存在,只要是w模式一定会你先清空文件
    "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)
                rU
                r+U
    

      "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件或者图片,linux可忽略,windows处理二进制文件时需标注)

                rb
                wb
                ab
    

      文件的操作方法:

                open('file.txt','r+',encoding='utf-8')#encoding参数可以指定文件的编码

                f.readline()#读一行
                f.readable()#判断文件是否可读
                fr.writable()#判断文件是否可写
                fr.encoding#打印文件的编码
                f.read()#读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
                f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
                f.tell()#获取当前文件的指针指向
                f.seek(0)#把当前文件指针指向哪
                f.write('爱情证书')#写入内容
                f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中
                f.truncate()#清空文件内容
                f.writelines(['爱情证书','孙燕姿'])#写可迭代对象
                f.close()关闭文件
       f.tell()#记录现在的文件指针位置
    大文件时,读取文件高效的操作方法:
    用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了
    #文件对象也是可以迭代的
      # count = 1
      # for line in f:
      # print('第%s行是%s'%(count,line))  这样就是一行一行的读取文件
      # count +=1

    修改文件:
    修改文件的话,有两种方式,一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;
    第二种是把修改后的文件内容写到一个新的文件中(推荐第二种)
    (一)、第一种
    f = open('b.txt','a+')#f代表的是这个文件的队形,也叫做句柄
    # res = f.read()
    # f.seek(0)
    # f.truncate()
    # new_res = res.replace('nnnn','nono')
    # f.write(new_res)

    # f.close()
    或者: with可以在使用完文件后自动关闭文件
    # with open('b.txt','w+',encoding='utf-8')  as f:
    # f.seek(0)
    # res = f.read()
    # f.seek(0)
    # f.truncate()
    # new_res = res.replace('nnnn','tttt')
    # f.write(new_res)
    (二、)第二种
    import os

    # with open('b.txt','r+',encoding='utf-8') as fr , open('a.txt','w',encoding='utf-8') as fw:
    # for line in fr:
    # new_line = line.replace('nono','tttt')
    # fw.write(new_line)
    # os.remove('b.txt')
    # os.rename('a.txt','b.txt')

     e.g:修改文件

    #修改文件
    #python xxx.py hh.txt hehe haha 必须在命令行运行

    import sys,os
    #sys.argv #他就是用来获取在用python命令行运行python文件的时候,传入参数
    #第一步判断用书输入的参数是不是够个数
    inputs = sys.argv
    if len(inputs) < 4:
    print('参数不够至少需要三个参数,e.g:python xx.python xx.txt old_str new_str')
    else:
    file_name = inputs[1]
    old_str = inputs[2]
    new_str = inputs[3]
    new_file_name = file_name +'.new'
    # os.path.exists()#判断路径是否存在#
    if os.path.exists(file_name):
    with open(file_name,encoding='utf -8') as fr ,open(new_file_name,'w') as fw :
    for line in fr:
    res = line.replace(old_str,new_str)
    fw.write(res)
    os.remove(file_name)
    os.rename(new_file_name,file_name)
    else:
    print('文件不存在')
  • 相关阅读:
    bootstrap按钮
    bootstrap输入框组
    bootstrap单选
    bootstrap复选框
    bootstrap输入框
    bootstrap浮动
    HO引擎近况20201017
    C#.NET项目中引用EXCEL报错的问题
    MATLAB实例:读取Fashion MNIST数据,保存为.mat文件,并展示部分样例
    MATLAB实例:BP神经网络用于回归任务
  • 原文地址:https://www.cnblogs.com/lingxia/p/7172080.html
Copyright © 2011-2022 走看看