zoukankan      html  css  js  c++  java
  • python-文件操作

    文件操作

     打开文件

    f = open('歌词','w',encoding='utf-8')  

    # f:文件操作符 文件句柄 文件操作对象

    # 习惯叫f file f_obj f_handler fh

    open打开文件是依赖了操作系统的提供的途径
    操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
    win 是gbk编码形式,Mac和Linux是使用的utf-8编码形式
    print(f.writable())   #判断文件是否可写
    print(f.readable())   #判断文件是否可读
    f.write('123456')   #写文件的时候需要写数字,需要把数字转换成字符串
    print(f.write('123456'))    #返回值表示占有的字符数,如果带有
    ,需要再加1个字节
    f.write('asdff')
    f.write('isfgs
    ')  #
     文件的换行
    f.write('
    dljf')   #
    在后面,表示本次写入完成后,下一次再写入的内容会换行,
    在前面,表示本次写入的内容会在下一行显示
    文件处理的步骤:
    f = open('歌词','w',encoding='utf-8')
    f.write('46564')
    f.close()
    del f #可写可不写
    关闭文件详解:操作系统级别的关闭文件资源:f.close()
    del f 主动释放了一个python程序内存中的变量,可写可不写
    找到文件详解:文件与py的执行文件在相同路径下,直接用文件的名字就可以打开文件
    文件与py的执行文件不在相同路径下,用绝对路径找到文件
    文件的路径:需要用取消转译的方式来表示,有两种形式:r 或\
    如果以写文件的方式打开一个文件,那么不存在的文件将会被创建,存在的文件之前文件中的内容将会被清空
    f = open(r'C:UsersAdministratorDesktopa.txt','w',encoding='utf-8')
    f = open('C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8')
    f.write('哈哈哈')
    f.close()
    打开文件:
    f = open('歌词','r',encoding='utf-8')
    1. 读文件的第一种方式:read,用read方法会一次性的读出文件中的所有内容
    content = f.read()
    f.close()
    print(content)
    2. 读一部分内容:read (n),指定读n个单位(包含转行符)
    f = open('歌词','r+',encoding='utf-8')
    content = f.read(2)
    f.close()
    print(content)
    3. 读文件的第三种方式:按照行读,每次执行readline就会往下面再读一行(从上一次读取结束的位置往下读取一行)
    content = f.readline()
    f.close()
    print(content.strip())  #strip去掉空格,制表符,换行符
    4.读文件的第四种方式:readlines 返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
    content = f.readlines()
    print(content,type(content))      #['wenwen
    ', '123
    ', 'hello
    ', 'das'] <class 'list'>
    5.读:最常用
    for i in f

    b:图片,音乐,视频等任何文件,用于传输:上传和下载,在网络编程中会详细讲解
    f = open('歌词','rb')
    content = f.read()
    print(content)
    f.close()
      
    一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
    常用的:r , w  , a
    rb ,wb ,ab不需要指定编码了
    f = open('歌词','rb')
    content = f.read()
    f.close()
    print(content)
    f2 = open('歌词2','wb')
    f2.write(content)
    f2.close()
     
    r+ 可读可写:1.先读后写:写是追写 2.先写后读:从头开始写
    f = open('歌词','r+',encoding='utf-8')
    line = f.readline()
    print(line)
    f.write('0000')
    f.close()
    
    w+ 可写可读:一上来文件就清空了,
    尽管可读:1,但是你读出来的内容是你这次打开文件新写入的
              2,光标在最后,需要主动移动光标才可读
    f = open('歌词','w+',encoding='utf-8')
    f.write('abc
    ')
    f.write('哇哈哈')
    f.seek(0)       #光标跳到最开始的地方才可以读取到内容,在新增过文件内容后光标是在最后面的
    print(f.read())
    f.close()
    
    seek 光标移动到第几个字节的位置
    f.seek(0)    #移动到最开始
    f.seek(0,2)    #移动到最末尾
    print(f.readline())
    tell 告诉我光标在第几个字节
    f = open('歌词','r+',encoding='utf-8')
    print(f.seek(0,2))
    print(f.tell())
    f.truncate(3)
    seek 移动光标到指定位置(去最开始,去最结尾)
    truncate:文件中只保留n个字节
    
    
    
    注意:
      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
    2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,
    所以truncate要在r+或a或a+等模式下测试效果
    购物车
    f = open('shoplist',encoding='utf-8')
    goods_dict = {}
    for line in f:
        line = line.strip()
        goods_list = line.split()
        goods_dict[goods_list[0]] = goods_list[1:]
    print(goods_dict,type(goods_dict))
    
    
    f = open('shoplist',encoding='utf-8')
    goods_list = []
    for line in f:
        goods_dic = {'name':None,'price':None,'数量':None}
        line = line.strip()
        goods_lit = line.split()
        # print(goods_list)
        goods_dic['name'] = goods_lit[0]
        goods_dic['price'] = goods_lit[1]
        goods_dic['数量'] = goods_lit[2]
        goods_list.append(goods_dic)
    print(goods_list)
    f.close()
    
    
    f = open('shoplist', encoding='utf-8')
    good_list=[]
    for line in f:
        # if line.strip():            #只显示文件中有内容的行
            # print(line.strip())
        line = line.strip()
        goods_list = line.split()
        print(goods_list)
    f.close()

    文件的修改
    1.创建一个新文件
    2.把原来的文件中的内容读出来
    3.操作读出来的字符串,把字符串中的内容替换掉
    4.把替换之后的内容写到新文件里
    5.删除原文件,新文件重命名成原文件的名字
    删除原文件需要以下操作:
    import os #os模块
    os.remove('原文件') #删除文件
    os.rename('原文件.bak','原文件') #把新文件重命名为原文件的名字
    具体步骤如下:
    f1 = open('原文件.bak','w',encoding='utf-8')
    f = open('原文件',encoding='utf-8')
    old_content = f.read()  #原来的内容
    
    new_content = old_content.replace('','原来')
    f1.write(new_content)
    f.close()
    f1.close()
    import os
    os.remove('原文件')
    os.rename('原文件.bak','原文件')
    具体步骤,修改全部
    当文件特别大时上面方法就不适用了
    当文件特别大时,只改第一个要修改的内容

     with操作

    with open('原文件',encoding='utf-8') as f:
        content = f.read()
        print(content)
    
    with open('原文件',encoding='utf-8') as f:
        content = f.read()
        for line in f:
            print(line.strip())
    
    with open('原文件',encoding='utf-8')as f,open('原文件.bak','w',encoding='utf-8')as f1:
        for line in f:
            new_line = line.replace('原来','')
            f1.write(new_line)
    import os
    os.remove('原文件')
    os.rename('原文件.bak','原文件')
  • 相关阅读:
    使用MingGW-w64 Build Script 3.6.7搭建ffmpeg编译环境
    ffmpeg精简编译
    CListCtrl死锁的问题
    VC程序禁用提示框
    rtmp协议分析
    [置顶] zabbix发送告警
    [置顶] 个人微信号发送zabbix告警信息
    [置顶] 一个简单好用的zabbix告警信息发送工具
    [置顶] zabbix告警信息-lykchat信息发送系统
    模拟登陆web微信的流程和参数细节
  • 原文地址:https://www.cnblogs.com/dwenwen/p/7773018.html
Copyright © 2011-2022 走看看