Python-文件操作

文件操作模式

模式
r:只读
w:写
a:追加
r+: 读写
w+:写读
a+:追加写读
rb:只读字节
wb: 写字节
ab:追加字节
r+b:读写字节
w+b:写读字节
a+b:追加写读字节

常用的操作

1.光标(seek)
2.tell 查看光标当前位置
3.truncate 截断文件 删除后面全部内容

文件操作的函数

open(文件名(路径),mode="模式",encoding="字符集")

r w a 的使用

读文件

f=open('file.txt',mode='r',encoding='UTF-8')
s=f.read()
print(s)
f.close()
好好学习,天天向上

文件路径

1.绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找
2.相对路径,相对于当前程序所在的文件夹

windowns的绝对路径文件读取 win是gbk

f=open("e:/abc/text.txt",mode='r',encoding='gbk')
s=f.read()
print(s)
f.close()

相对路径使用 ../上一层文件夹

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

如果读取大文件的时候

f=open('测试文件',mode='r',encoding='utf-8')
for line in f: #文件时一个可迭代对象
    print(line.strip()) #一行一行的处理数据
f.close()

写操作

带w的,只要你操作了,就会清空源文件,如果文件不存在,会自动创建文件

f=open('测试文件',mode='w',encoding='utf-8')
f.write('好好学习\n')
f.write('天天向上\n')
f.flush()
f.close()

追加模式

写的时候,换行需要手动控制 \n

f=open('测试文件',mode='a',encoding='utf-8')
f.write('好好学习\n')  
f.write('天天向上')
f.flush()
f.close()

rb,wb,ab 的使用(处理的是非文本文件)

读取一张图片,然后写入e盘(相当于拷贝)

f=open("c:/tp.jpg",mode='rb')  #这里不能写encoding
e=open("e:/tp.jpg",mode='wb')
for line in f:  #从c盘读取 
    e.write(line)  #写入e盘
f.close()
e.flush()
e.close

r+ b+ a+

**r+读写(不论你读取了多少内容,光标在哪儿,写入的时候都是在结尾写入),r+是最好用的 **

f=open('测试文件',mode='r+',encoding='utf-8')
s=f.read(3) #读取三个字符
print(s)
f.write('起飞了') #在末尾写
f.close()

w+ 还是会先空文件不建议使用,除非上来就写入,这时写入是在开头

a+追加写,需要把光标移动到最前头,才能读取,也很不好用

文件相关操作

光标移动到开头

f=open('文件测试',mode='r',encoding='utf-8')
for line in f:  #读取到结尾
    print(line.strip())
f.seek(0) #移动到开头
for line in f:   #会在读取一边
    print(line.strip())
f.close()

光标移动到某个位置
注意:移动的单位是byte 所以如果是UTF-8的中文部分要是3的倍数

seek讲解
移动到开头:seek(0)
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾

f=open('文件测试',mode='r',encoding='utf-8')
s=f.read(1) #读取一个字符
f.seek(3) #3byte=>1个中文,3个英文

文件内容的替换

with自动关闭

import os  #引入模块

with open('测试文件',mode='r',encoding='utf-8') as f1,\
  open('测试文件_副本',mode='w',encoding='utf-8') as f2:
    for line in f1:
        line=line.replace('好好','不好好')#将好好替换成不好好
        f2.write(line) #副本里写更改后的
os.remove('文件测试') #删除文件
os.rename('文件测试_副本','文件测试') #重命名

读取日志文件

文件内容
id,name,phone,car
1,sky,10086,特斯拉
2,天天,10010,五菱宏光
3,向上,10000,摩拜
4,学习,12345,小黄

lst=[]
with open('文件测试',mode='r',encoding='utf-8') as f:
    first=f.readline().strip().split(',')
    for line in f:
        dic={}  #每一行一个字典
        ls=line.strip().split(',')
        for i in range(len(first)):
            dic[first[i]]=ls[i]
        lst.append(dic)
print(lst)

你可能感兴趣的:(Python-文件操作)