zoukankan      html  css  js  c++  java
  • Python之文件操作

    文件操作

    打开文件的两种方式

    1. open('文件名','模式','指定编码')

      # 写入文件
      fw = open("plf.txt","w",encoding = 'utf-8')
      fw.write("我正在写入数据到文件中")
      fw.close()
      
      # 读文件
      fr = open("plf.txt","r",encoding = 'utf-8')
      data = fr.read()
      print("文件内容为:%s"data)
      fr.close()
      
      
      '''
      	总结:
      		1. 读写文件都需要手动关闭文件,不方便
      
      '''
      
    2. with open('文件名','模式','指定编码') as 文件名:

      # 写入文件
      with open("plf.txt","w",encoding = 'utf-8') as fw:
      	fw.write("我正在写入数据到文件中")
      
      # 读文件
      with open("plf.txt","r",encoding = 'utf-8') as fr:
      	data = fr.read()
      	print("文件内容为:%s"%data)
      
      
      # 嵌套写法
      with open("plf.txt","r",encoding = 'utf-8') as fr,
      	open("file1.txt",'w',encoding = 'utf-8') as fw:
              for i in fr:
                  fw.write(i)
      
      '''
      	优点:
      		1. 读写文件不需要手动关闭,直接由程序自动关闭,在工作中常使用该方法操作文件
      
      '''
      
      

    操作文件的模式

    # 文件plf.txt内容为
    '''
    文件内容为:Hello World!
    咱们都是中国人!
    '''
    
    
    # 读  r
    with open("plf.txt","r",encoding = 'utf-8') as fr:
    	data = fr.read()
    	print("文件内容为:%s"%data)
        
    '''
    文件内容为:Hello World!
    咱们都是中国人!
    '''    
    
    
    
    
    
    
    # 写  w
    with open("plf.txt","w",encoding = 'utf-8') as fw:
    	fw.write("我正在写入数据到文件中")
        
    '''
    我正在写入数据到文件中
    '''
        
        
        
        
        
    # 追加 a
    with open("plf.txt","a",encoding = 'utf-8') as fa:
    	fa.write("我正在后面追加文件")
    '''
    我正在写入数据到文件中我正在后面追加文件
    '''
        
        
        
        
        
    
    # 读写 r+
    with open("plf.txt","r+",encoding = 'utf-8') as fr_w:
        fr_w.write("Hello World!")
        fr_w.write("咱们都是中国人!")
        data = fr_w.read()
        print("%s"%data)
    '''
    我正在写入数据到文件中我正在后面追加文件Hello World!咱们都是中国人!
    '''
    
    
    
    
    
    
    
    # 读写 w+
    with open("plf.txt","w+",encoding = 'utf-8') as fw_r:
        fw_r.write("Hello World!")
        fw_r.write("咱们都是中国人!")
        data = fw_r.read()
        print("%s"%data)
    '''
    Hello World!咱们都是中国人!
    '''
    
    
    
    
    
    
    
    # 读写 a+
    with open("plf.txt","a+",encoding = 'utf-8') as fa_rw:
        fa_rw.write("   正在追加数据")
        fa_rw.seek(0,0)   # 设置光标回到文件头
        data = fa_rw.read()
        print("%s"%data)
    '''
    Hello World!咱们都是中国人!   正在追加数据
    '''
    
    '''
    	总结:
    		常用的模式有(r,w,a,rt,wt,at,rb,wb,ab),通常不推荐可读可写的模式,存在IO问题。
    		t模式,代表文本模式
    		b模式,代表将文本内容转化为二进制,使用该模式时,不要增加编码
    '''
    

    总结:

    模式 可做操作 若文件不存在 是否覆盖
    r 只能读 报错 -
    r+ 可读可写 报错
    w 只能写 创建 是,清空再写
    w+ 可读可写 创建 是,清空再写
    a 只能写(追加) 创建 否,追加写
    a+ 可读可写 创建 否,追加写

    绝对路径,相对路径

    绝对路径:从根目录到某一个文件的路径

    相对路径:从当前位置到某一个文件的路径

    文件操作的方法

    # truncate()  保留从文件头的三个字节(一个中文字符是是三个字节,英文字符为2个字节)
    with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
        fr_w.write("你快点走开")
        fr_w.write("咱们都是中国人!")
        fr_w.truncate(3)	
        data = fr_w.read()
        print("%s"%data)
        
        
        
    # tell()  返回光标所在的位置(按字节算),除了read()是按字符算,其他文件操作的方法都是按照字节算    
    with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
        fr_w.write("你快点走开")
        fr_w.write("咱们都是中国人!")
     	num = fr_w.tell()   
    	print(num)   
        
    # seek 第一个0:光标偏移多个字节  第二个0:有三种模式。0表示光标回到文件头;1表示光标在当前位置进行偏移;2表示光标在文件尾进行漂移    
    with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
        fr_w.write("你快点走开")
        fr_w.write("咱们都是中国人!")
     	fr_w.seek(0,0)   #
        num = fr_w.tell
        print(num)       
    
        
    # read(n) 不传参默认表示一次性把文件中的内容全读出来,n代表字符个数。除此之外,其他但凡涉及文件指针的都是字节个数   
    with open("plf.txt","r",encoding = 'utf-8') as fr:
    	data = fr.read()		
    	print("文件内容为:%s"%data)
    
    # readline() 读取一行内容    
    with open("plf.txt","r",encoding = 'utf-8') as fr:
    	data = fr.readline()		
    	print("文件内容为:%s"%data)
    
    # readlines()  列表,它会将每一行内容当做一个元素存入列表中  (不推荐,占内存)  
    with open("plf.txt","r",encoding = 'utf-8') as fr:
    	for i in  fr.readlines():		
    		print("%s"%i)
            
    # 直接使用文件操作符,来遍历文件内容。(推荐使用)        
    with open("plf.txt","r",encoding = 'utf-8') as fr:
    	for i in  fr:		
    		print("%s"%i)
    

    修改文件的两种方式

    1. 第一种:从A文件读取完数据之后,然后把数据重新写入A文件中(不推荐使用,可能存在IO问题)

      with open('37r.txt','w+') as fr,
          data = fr.read()  # 全部读入内存,如果文件很大,会很卡
          data = data.replace('tank', 'tankSB')  # 在内存中完成修改
          fr.write(data)  # 一次性写入原文件
      
      print('done...')
      
    2. 第二种:从A文件中读取数据,然后再写入B文件中,最后删除A文件,同时将B文件名改为A文件名

      import os
      
      with open('37r.txt') as fr,
              open('37r_swap.txt', 'w') as fw:
          # 循环读取文件内容,逐行修改
          for line in fr:
              line = line.replace('jason', 'jasonSB')
              # 新文件写入原文件修改后内容
              fw.write(line)
      
      os.remove('37r.txt')
      os.rename('37r_swap.txt', '37r.txt')
      print('done...')
      
  • 相关阅读:
    scala 数据结构(七 ):集 Set
    scala 数据结构(六):映射 Map
    scala 数据结构(五):队列 Queue
    scala 数据结构(四):列表 List
    scala 数据结构(三):元组Tuple
    scala 数据结构(二):数组
    scala 数据结构(一):数据结构简介
    Scala 面向对象(十三):隐式转换和隐式参数
    vba报表制作
    Apache与Nginx
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/10938279.html
Copyright © 2011-2022 走看看