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() # 每次读取一行,每行最后有一个\n
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)

  



posted on 2019-08-16 13:47  一抹天空  阅读(175)  评论(0编辑  收藏  举报

导航