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

    文件读操作
    1,r模式

    f = open('test.txt', mode='r', encoding='utf-8')
    print(f.read())
    f.close()

    with open('test.txt', 'r', encoding='utf-8')as f:
    print(f.read())
    两种方式获得文件句柄,推荐with,运行完之后自动关闭文件
    2,rb模式
    with open('test.txt', 'rb', encoding='utf-8')as f:
    print(f.read())
    # 读出来的是字节
    3,读操作其它方法:
    f.readline() # 每次读取一行,每行最后有一个
    f.readlines() # 将每一行形成一个元素,并添加到一个列表中,当文件过大时,内存会崩
    推荐使用如下:
    with open('1','r',encoding='utf-8')as f:
    for i in f:
    print(i)

    文件写操作
    1,使用w模式的时候,在打开文件的时候就就会把文件中的所有内容都清空,然后再操作;如果文件不存在使用w模式会创建文件,
    文件存在w模式是覆盖写,在打开文件时会把文件中所有的内容清空.
    f.write()
    2,wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
    3,追加写操作:
    只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.
    在追加模式下,我们写入的内容后追加在文件的末尾
    a模式如果文件不存在就会创建一个新文件
    ab模式和上面一样,没有太大区别
    r+模式是先读后写
    w+模式
    先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,不常用
    a+模式
    a+模式下,不论是先读还是后读,都是读不到数据的

    其他操作方法:
    1,移动光标位置:seek()
    seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
    通常我们使用seek都是移动到开头或者结尾
    移动到开头:seek(0,0) 可以看做成seek(0)
    seek(6)这种如果是单数并且不是0的就是按照字节来移动光标
    移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
    2,查看当前光标位置:tell()
    使用tell()可以帮我们获取当前光标在什么位置,语法:fileObject.tell()

    文件修改
    文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字

    练习1:
    1,文件a1.txt内容
    name:apple price:10 amount:3 year:2012
    name:tesla price:100000 amount:1 year:2013

    通过代码,将其构建成这种数据类型:
    [{'name':'apple','price':10,'amount':3,year:2012},
    {'name':'tesla','price':1000000,'amount':1}]
    并计算出总价钱。
    list_sale = []
    sum1 = 0
    with open('a1','r',encoding='utf8')as f:
        for line in f :
            data = line.strip().split()
            dict_sale = {}
            for a in data:
                a1,a2 = a.split(':')
                if a1 == 'name':
                    dict_sale[a1] = a2
                else:
                    dict_sale[a1] = int(a2)
            list_sale.append(dict_sale)
        print(list_sale)
    for b in list_sale:
        sum1 += b['price']*b['amount']
    print(sum1)
    

      

    2,文件a2.txt内容
    序号 部门 人数 平均年龄 备注
    1 python 30 26 单身狗
    2 Linux 26 30 没对象
    3 运营部 20 24 女生多
    通过代码,将其构建成这种数据类型:
    [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'}]
    list_1 = []
    with open('a2','r',encoding='utf8')as f:
        line1 = f.readline().strip().split()#['序号','部门', '人数','平均年龄','备注']
        for line2 in f:
            data = line2.strip().split()
            dict_1 = {}
            for x in range(len(data)):
                dict_1[line1[x]] = data[x]
            list_1.append(dict_1)
        print(list_1)
    

      



  • 相关阅读:
    南阳oj 82 迷宫寻宝(一)
    杭电 oj 1016 Prime Ring Problem
    杭电 oj 3350 #define is unsafe
    南阳oj 366 全排列 D的小L
    南阳oj 32 组合数
    部分和问题 南阳oj 1058
    HNUSTOJ 1516:Loky的烦恼
    HDU-1874 畅通工程续
    T-聊天止于呵呵
    P-残缺的棋盘
  • 原文地址:https://www.cnblogs.com/zzzhao/p/11363410.html
Copyright © 2011-2022 走看看