• python 文件处理


    变量 = open(r'文件路径)','r[打开文件模式]',encoding='utf-8文本字符集[默认是unicode]')
    win 需要在路径上加 r ,字符集跟文件写入的格式.

    (1). 打开文件的模式有(默认为文本模式[test]):
    r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a,只追加写模式【不可读;不存在则创建;存在则只追加内容】

    (2). 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb
    wb
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    (3),‘+’模式(就是增加了一个功能)
    r+, 读写【可读,可写】--- 文件必须存在
    w+,写读【可写,可读】 --- 文件没有存在,直接创建
    a+, 写读【可写,可读】

    (4),以bytes类型操作的读写,写读,写读模式
    r+b, 读写【可读,可写】
    w+b,写读【可写,可读】
    a+b, 写读【可写,可读】

    2. 操作方法
    read
      1. 文件打开方式为文本模式时,代表读取3个字符
      2. 文件打开方式为b模式时,代表读取3个字节
    其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate
    注意:
      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。(先清空,在写)


     w --模式写 光标先从头开始,先清空,在写
     
     writable()  ---判断文件是否可写 -- True/False
     实例:
     f=open(r'a.txt','w',encoding='utf-8')
     print(f.writable())
     f.close()

     True

     write()  ---直接写,默认追加最后,每次都是从头在
     实例:
     f=open(r'a.txt','w',encoding='utf-8')
     # print(f.writable())
     f.write('1111 ')
     f.close()
     1111
     
     writelines()  ---可以已列表,元祖,字典方式写入
     f=open(r'a.txt','w',encoding='utf-8')
     f.writelines(['3333 ','44444 '])
     f.close() 
     3333
     44444
     
     a ---模式追加 文件不存在则创建,文件存在那么打开文件后立刻将光标移动最后.
     
     r ---读模式,必须文件存在
     
     read.() ---文件全部读在内存中,建议小文件
     
     readlines()  ---文件全部读在内存中,但是放在列表中显示
     
     readline(),end='' ---一次读一行,默认会带一个换行符,加上end='' 指定空
     
     循环打印:
     with open('b.txt','r',encoding='utf-8') sa f: #f 指定变量名字
      for i in f:
       print(i)
       
     b ---bytes 二进制读,不能指定字符编码,解码文本格式加.decode('utf-8')
     with open('b.txt','rb',) as f:
      print(f.read().decode('utf-8'))

     python cp 命令:
     
     import 函数用于动态加载类和函数
      os模块

     os.remove(path)
      删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。

     os.rename(src, dst)
      重命名文件或目录,从 src 到 dst
     
     实例:
     import os
     
     with open('a.txt','r',encoding='utf-8') as f ,
              open('.a.txt.swap','w',encoding='utf-8') as o:
         # data = f.read()
         # o.write(data.replace('alex','ALEX')) #方法一:只适合小文件
         for i in f:
             print(i)
             o.write(i.replace('alex', 'ALEX'))
     os.remove('a.txt')
     os.rename('.a.txt.swap','a.txt') 
      
     
     replace('旧','新',' 替换不超过 max 次(不在全部)')
     
     split()
     指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串
     语法
     split() 方法语法:
     str.split(str="", num=string.count(str)).
     
     参数
     str -- 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。
     num -- 分割次数。
     
     实例
     以下实例展示了split()函数的使用方法:
     #!/usr/bin/python

     str = "Line1-abcdef Line2-abc Line4-abcd";
     print str.split( );
     print str.split(' ', 1 );
     以上实例输出结果如下:
     ['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
     ['Line1-abcdef', ' Line2-abc Line4-abcd']

     '''
     1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
     apple 10 3
     tesla 100000 1
     mac 3000 2
     lenovo 30000 3
     chicken 10 3
     通过代码,将其构建成这种数据类型:
     [{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......]
     并计算出总价钱。
     '''


     list_info = []

     with open(r'b.txt','r',encoding='utf-8') as f:
      for i in f:
       list = i.split()
       print(list)
       list_info.append({'name':list[0],'price':int(list[1]),'count':int(list[2])})
      # money = list(map(lambda x:x['price']*x['count'],list_info))
      money = map(lambda x: x['price'] * x['count'], list_info)
      ss = sum(money)
      print('共消费 %d 元'%ss)
     print(list_info)
      
     
     2,有如下文件:
     '''
     -------
     alex是老男孩python发起人,创建人。
     alex其实是人妖。
     谁说alex是sb?
     你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
     ----------
     将文件中所有的alex都替换成大写的SB。
     '''

     import os

     with open('a.txt','r',encoding='utf-8') as f ,
        open('.a.txt.swap','w',encoding='utf-8') as o:
      # data = f.read()
      # o.write(data.replace('alex','ALEX')) #方法一:只适合小文件
      for i in f:
       print(i)
       o.write(i.replace('alex', 'ALEX'))
     os.remove('a.txt')
     os.rename('.a.txt.swap','a.txt')

    2. 控制光标移动
    创建一个文件:a.txt
    helli你好

    with open('a.txt','r',encoding='utf-8') as f:
     data1=f.read()
     print(data1)
     print(f.tell()) #告诉光标在什么位置,显示是以 字节
     #只有一种情况下光标以字符为单位: 文件以rt方式打开,read(3)
     #方法一:
     f.seek(0)
     
     #方法二: f.seek('移动的数','参照物,默认是0'),--只有t模式下,还可以使用0,1和2不可以
     #有三种模式0,1,2 (0是首尾,1是当前的位置,2是以末尾)--1和2 必须在b 模式下使用
     f.seek(0,0)

    tail -f access.log

    截断文件:
     只能用a模式 ,如果使用w模式,直接清空

     with open('access.log','a',encoding='utf-8') as f:
      f.truncate(3)  #没有0,1,2 全都是从头开始

  • 相关阅读:
    Spring/Java error: namespace element 'annotation-config' … on JDK 1.5 and higher
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Zhuo' did not find a matching property.
    快速学习Symfony4,Symfony4教程
    window下安装redis报错: creating server tcp listening socket 127.0.0.1:6379: bind No error
    Windows 安装nginx
    js焦点事件:onfocus、onblur、focus()、blur()、select()
    input 输入框只能输入纯数字
    随机抽取不重复的数组元素
    常用 书签 mark 常用网站
    仿真灯泡 电灯泡 灯光 光环闪烁 流星雨
  • 原文地址:https://www.cnblogs.com/liwei-python-21/p/8886387.html
Copyright © 2020-2023  润新知