一、文件处理流程 1、打开文件,得到文件句柄赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件
文件操作的格式: 变量 = open(‘路径’, ‘转码’, ‘模式’)
文件以什么方式存储就以什么编码方式打开,
对文件的操作只需呀记得 你打开 要找到文件的位置来打开 文件路径,编码,和要对文件进行的操作 ,然后找个变量来接收对文件操作的内容 然后再把文件关闭
读取:r r模式读取模式有五种:
read ------->只读模式
readline------> 一行一行的读取文件
readlines ----->把文件的所有信息都显示在一行 并且是放在列表中的,同时放进去的同时还是有换行符\n的
read(n)-------->是读取文件的第n个字符
还有就是循环读取 ,你read的时候循环把文件的每一行给调取出来 然后调取一行并且打印之后再释放掉 然后再调取下一行
r只读模式:
复制代码
f= open('F:\测试.txt',encoding='UTF-8',mode='r') m =f.read()
print(m) 去吃饭咋嫩饿 你就知道去吃 减减肥啊 f.close 复制代码 readline()------>把文件一行一行的打印出来:
复制代码
f = open('F:\测试.txt',encoding="UTF-8",mode="r") m =f.readline() n = f.readline() print(m, n) 去吃饭咋嫩饿 你就知道去吃
print(m) 去吃饭咋嫩饿
print(n) 你就知道去吃
f.close()
复制代码 readlines()----->可以把所有的信息全部都打印在一行 并且加上换行符\n一起显示的 然后再把所有的信息全部都放在一个列表中打印出来的
f = open('F:\测试.txt', encoding="UTF-8", mode="r") m = f.readlines() #把所有的信息都打印在一行 是打印在一个列表中 print(m) ['\ufeff去吃饭咋嫩饿\n', '你就知道去吃\n', '减减肥啊'] f.close()
也可以在读取的时候限制读取多少个字符
f = open('F:\测试.txt', encoding='UTF-8',mode='r') m = f.read(3) #这个里面的3代表的是读取的是3个字符 所以也只打印出三个字符 print(m) f.close() 也可以对readline 和readlines来操作:如果对readline来操作那么就和reada的意义和结果一样,但是readline的源码默认是取到-1的(这点我也不清楚)
f = open('测试', encoding='UTF-8',mode='r') m = f.readline(3) #只打印出三个字符 print(m) f.close() 而readlines就很有意义了 readlines也是默认取到-1的哪怕你就是括号内 输入无限大负数也会只是把所有的信息都在一行的显示出来 然后再根据其他的数字来根据第一行来定义
其实逐行读取打印的时候最有效率的方法是用循环读取:因为循环读取就是可以把所有的信息一行一行的调取到内存中显示之后释放掉 然后再调取下一行 然后再显示 再释放:
f = open('测试', encoding='UTF-8',mode='r') for i in f : print(i.strip()) f.close() "b"表示以字节的方式操作
rb 或 r+b wb 或 w+b xb 或 w+b ab 或 a+b 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
写的操作:write
write是对文件写入信息 但是首先先把这个文件清空 再写入您的要写的信息 并且如果没有这个文件那么就先创建这个文件再对文件进行写入
f = open('测试', encoding='UTF-8',mode='w') f.write('hhh') f.close() 与write对应的是a 就是mode上面是a然后就对应的是a就是追加的意思 只是再文件的信息后面追加你的信息
f = open('测试', encoding='UTF-8',mode='a') #看只是在这里把mode‘后面更改等于a就可以了 f.write('000') f.close() 只读模式rb:
f = open('F:\测试.txt', mode='rb') count = f.read() print(count) f.close() 先读取再追加 r+:
View Code
三、上下文管理(其实就是r w的精化写法 就是不用再写close的方法,省的有些人忘记了)
wIth open('路径',encoding= "UTF-8", r/w) as f :
pass
with open("F:\测试.txt",encoding="UTF-8", mode='r')as f : c= f.read() print(c) with open('F:\测试.txt',encoding= 'UTF-8',mode='w')as f: f.write('eee') count =f print(count) with open('F:你.txt',encoding="UTF-8", mode ="r")as f,
open("F:\你.txt", encoding="UTF-8",mode="a") as f2: #如果同时操作多个文件的时候第一个文件后面是逗号隔开 content = f.read() new_content = f2.write('nihao') print(content) print(new_content) #write是返回的写入的字符 文件内光标移动:
一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
seek()移动光标的位置 不论tell查找光标还是移动光标seek()都是按照字节来解决的
tell()顾名思义就是查找光标的位置
复制代码 f = open('F:\你.txt', encoding= "UTF-8",mode='r+') count = f.read() print(count) f.write('aaa') print(f.seek(3)) #把光标的位置移动到第三个字节 print(f.tell()) #读取当前的光标在哪里 也是按照字节来寻找 f.close() 复制代码 每日作业:
- 文件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}......] 并计算出总价钱。
View Code 2,有如下文件:
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
将文件中所有的alex都替换成大写的SB。
View Code 3. 文件a1.txt内容: 文件内容:
name:apple price:10 amount:3 year:2012 name:tesla price:100000 amount:1 year:2013
通过代码,将其构建成这种数据类型: [{'name':'apple','price':10,'amount':3}, {'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。