【python 3】 文件操作

文件操作

一: 只读、读写

 # 示例:

 1 f = open("E:\人员名单.txt" , encoding="utf-8" , mode="r")
 2 content = f.read()
 3 print(content)
 4 f.close()

解析:
6 ♦ f / f_obj / obj / file_hl / file_hanlder : 变量、文件句柄
7 ♦ open : windows中的系统命令
8 ♦♦ "E:\人员名单.txt" : 绝对路径(从根目录开始的路径)
9 #相对路径(同一个文件夹下的文件)
10 ♦♦♦ mode(r:文件的指针将放在文件的开头) 11 ## mode = "r" : 对文件只读 12 ## mode = "rb" : 一般用在非文字类型的文件:图片、视频,文件的上传和下载功能 13 ## mode = "r+" : 读写(先读后写) 13 ## mode = "r+b" : 读写以 byte 类型 14
15 注:以 b 模式操作的文件,不用加上“encoding = "utf-8"”。
15 15 ♦♦♦ 读 的五种模式,返回字符串类型:
16  ① f.read() : 全部读出来
17  ② f.read(n): 若是 r 模式,则按照字符读取,只读取前n个字符
18 #若是 rb 模式,则按照字节读取
19  ③ f.readline() : 按行读
20  ④ f.readlines() : 每一行做为一个元素,存在列表中
21  ⑤ 推荐使用 22 ''' 23 f = open("E:\人员名单.txt","r",encoding="utf-8") 24 for i in f: 25 print(i) 26 f.close() 27 ''' 28 ♦♦ f.close() : 将文件句柄/动作关闭,节省内存
29 f.name : 打印文件的路径
30 ♦ f.mode : 打印文件的模式
31 f.closed : 判断文件是否关闭

 

 

二、只写、写读

① 通过 w 模式进行写操作

 1 f = open("E:\人员名单.txt","w",encoding="utf-8")
 2 f.write("牛六六\n孙七七")
 3 f.close()



② 通过 wb 模式进行写操作(写入二进制文件)

 1 f = open("E:\人员名单.txt","wb")
 2 f.write("牛六六\n孙七七".encode("utf-8"))
 3 f.close()

1 ♦ 只写的两种方式 : w  wb
2 ♦ 写读 : w+ w+b   (注 : 将原有内容删除之后重新写入内容,因光标在最后面,所有写完之后去读没有内容显示,可以在写之后将光标移动第一个(f.seek(0))再去读文件中的内容)
3 ♦ 若没有文件,则创建文件并写内容
4 ♦ 若有文件,则将原文件全部内容删除重新写内容(覆盖)

 

 

 

三、追加

1 f = open("E:\人员名单.txt","a",encoding="utf-8")
2 f.write("\n钱八八")
3 f.close()

## 只追加 :  a   ab
## 追加可读 :a+  a+b
## 在光标后面追加写入内容

 

 

 四、常用方法

  • f.tell()  : 查询光标的位置(按照字节调整);
  • f.seek(m,n)  : 移动光标(按照字节调整) m:要移动的字节数,n:指定开始移动字节的参考位置;  
    •  0 : 参考位置为文件开头
    •  1 : 参考位置为当前所在位置
    •     2 : 参考位置设为文件结尾
  • f.close() : 一定一定一定要关闭文件,不然会占用资源;
  • f.read(n) : 读取前 n 个字符;
  • f.readline() : 读取一行;
  • f.readlines() : 读取文件全部行,每行作为一个元素,形成一个列表(适合读小文件)
  • f.write()  : 写入,不能自动换行;
  • f.writelines() : 写入列表内容,可以写入多行;
  • f.readable() : 是否可读,返回布尔值;
  • f.writeable() : 是否可写,返回布尔值;
  • f.truncate(n)  : 在原文件上截取 n 个字节(通常在 a 或 a+ 的模式上运用);
  • f.name : 查看文件路径;
  • f.mode : 查看文件打开模式;
推荐使用的文件操作方法:

## 操作一个文件
1 with open("E:\人员名单.txt","r",encoding="utf-8") as f:
2     print(f.read())

## 操作多个文件
1 with open("E:\人员名单.txt","r",encoding="utf-8") as f1,\
2         open("E:\人员名单1.txt","r",encoding="utf-8") as f2:
3     print(f1.read())
4     print(f2.read())

 

 

五、实例

### 题目一:
肩背一匹布,手提一瓶醋,走了一里路,看见一只兔,卸下布,放下醋,去捉兔。跑了兔,丢了布,洒了醋。 存在电脑E盘的文件 绕口令.txt 中的内容如上, 将绕口令.txt 中的"一"改成"二"。 思路: 1、 创建一个新文件 2、 读取原文件 3、 将原文件的内容通过你想要的方式进行更改,并写入新文件 4、 将原文件删除 5、 将新文件重命名原文件
1 import os 2 with open("E:\绕口令.txt",encoding="utf-8") as f1, \ 3 open("E:\绕口令(修改后).txt","w+",encoding="utf-8") as f2: 4 for i in f1: 5 i = i.replace("","") 6 f2.write(i) 7 os.remove("E:\绕口令.txt") 8 os.rename("E:\绕口令(修改后).txt","E:\绕口令.txt") ## 题目二:
文件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}......] 并计算出总价钱。 1)
1 list = [] 2 3 with open("tester","r",encoding="utf-8") as f: 4 for i in f.readlines(): 5 i = i.strip().split(" ") 6 tuple = {} 7 tuple["name"] = i[0] 8 tuple["price"] = i[1] 9 tuple["amount"] = i[2] 10 list.append(tuple) 11 print(list) 12 sum1 = 0 13 for j in list: 14 price = int(j["price"]) 15 count = int(j["amount"]) 16 sum = price * count 17 sum1 = sum1 + sum 18 print(sum1)


2)优化:
list = []
with open("file2","r",encoding="utf-8") as f:
for i in f:
list1 = i.strip().split(" ")
dic = {"name":list1[0],"price":int(list1[1]),"amount":int(list1[2])} ### 直接创建有键值对的字典
list.append(dic)
print(list)
sum = 0
for j in list:
sum += j["price"] * j["amount"] ### 定义sum的值,使用+=就不会报错
print(sum)


3)利用zip()函数的做法:
list = []
list1 = ["name","price","amount"]
with open("file2","r",encoding="utf-8") as f:
for i in f:
list2 = i.strip().split(" ") ### 将字符串去除空格转换成列表
dic = dict(zip(list1,list2)) ### 利用zip()函数将list1和list2打包,并转换成字典格式
list.append(dic) ### 将字典添加到列表中
print(list)

 

转载于:https://www.cnblogs.com/clamheart/p/10212428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值