文章目录
- 读文件操作
- 写操作
- 文件的复制
- 3种方法替代readlines()
- 二进制文件的写入
- 二进制文件读取
- 文件指针
- 各种系统操作
- 各种目录操作
- os模块
- 绝对路径:总是从根文件夹开始,Window 系统中以盘符(C:、D:)作为根文件夹,而 OS X 或者 Linux 系统中以 / 作为根文件夹。
- 相对路径:指的是文件相对于当前工作目录所在的位置。例如,当前工作目录为 “C:\Windows\System32”,若文件 demo.txt 就位于这个 System32 文件夹下,则 demo.txt 的相对路径表示为 “.\demo.txt”(其中 .\ 就表示当前所在目录)。
相对路径和绝对路径详解
根据逻辑上的编码的不同,可以区分为文本文件和二进制文件。
f = file(name[, mode[, buffering]])
name 文件名
mode 选项,字符串
buffering 是否缓冲 (0=不缓冲,1=缓冲, >1的int数=缓冲区大小)
系统函数:open()打开文件。
读文件操作
open(path/filname,'rt')---->返回值:stream(管道)
container=stream.read() --->读取管道中的内容
如果传递path/filename有误则输出:FileNotFoundError
stream=open(r'a.txt','r')
# container=stream.read() #读流里面的任何东西
# print(container)
result=stream.readable() #判断是否可以读取
print(result)
# line=stream.readline()
# print(line) #此时没有任何东西,因为在流里的东西都读完了
#如果前面注释掉,用这个加一个循环可以一行一行的读出
'''
while True:
line=stream.readline() #每读一行加一个换行符
print(line)
if not line:
break
'''
lines=stream.readlines() #保存在列表中
print(lines)
总结:
read() 读取所有内容
readline() 一行一行的读取内容,每次读取一行加一个换行符
readlines() 读取所有行内容保存在列表中
readable() 是否可读
stream=open(r'a.jpe','rb') #读取图片文件参数rb不可以省略,因为默认为rt读取文本文档
container=stream.read()
print(container)
写操作
'''
mode='w' 表示写操作 将原来的内容清空再写
方法:
write(内容)
writelines(Iterable) 没有换行效果
'''
stream=open(r'a.txt','a')
s='''
你好!
欢迎来到这里,给你一个金币
游戏王:李白
'''
result=stream.write(s)
stream.write('杜甫')
stream.writelines(['赌圣\n','赌侠\n'])
print(result) #只要未释放,则可以一直写
stream.close()
文件的复制
'''
with 结合open使用,可以自动帮我们释放资源
'''
with open(r'first.jpg','rb') as f:
container=f.read()
with open(r'last.jpg','wb') as f1:
f1.write(container)
print("文件复制完成")
3种方法替代readlines()
readlines()方法,当文件很大时需要占用很大的内层。
方法一:结合循环结构和readline()方法。
f=open(r'a.txt')
line=f.readline()
while line:
print(line,end='')
line=f.readline()
f.close
方法二:利用iter(文件对象)返回一个迭代器,从而降低对内存的占用。
f=open(r'a.txt')
for line in iter(f):
print(line,end='')
f.close()
方法三:
f=open(r'a.txt')
for line in f:
print(line,end='')
f.close()
二进制文件的写入
方法一:struct.Struct对象中的pack()方法将数据转换为二进制的字节串,然后好用write()方法,写入文件。
import struct
#待存储的数据
values=(8,b'abc',9.9,True)
#传入格式字符串创建Struct对象
s=struct.Struct('I3sf?')
#利用Struct对象中的pack方法将数据转换为二进制字节串
packed_data=s.pack(*values)
f=open(r'example7_2.dat','wb')
f.write(packed_data)
f.close()
方法二:用pickle()方法中的dump()方法将数据转换为二进制并直接写入文件。
import pickle
s='好好学习'
li=[1,2,'天天向上',9.9]
d={1:10,2:20}
x=8
y=8.8
f=open('example7_2.dat','wb')
pickle.dump(s,f)
pickle.dump(li,f)
pickle.dump(d,f)
pickle.dump(x,f)
pickle.dump(y,f)
f.close()
二进制文件读取
import pickle
f=open('example7_2.dat','rb')
try:
while True:
x=pickle.load(f) #五内容可读时抛出异常
print(x)
except EOFError:
print("读取完毕!")
f.close()
文件指针
文件对象f的内置方法,f.seek(offset[,where])移动指针的位置进而实现文件数据的灵活读写。
where默认值为0就是文件头的位置,如果为1表示为指针当前位置,为2,则参照点为文件尾。
offset取正值朝文件尾位置移动,取负值则相反。
文件指针:
文件被打开后,其对象保存在 f 中, 它会记住文件的当前位置,以便于执行读、写操作,这个位置称为文件的指针( 一个从文件头部开始计算的字节数 long 类型 )。
文件打开时的位置:
以"r" “r+” “rb+” 读方式, “w” “w+” "wb+"写方式 打开的文件,
一开始,文件指针均指向文件的头部。
获取文件指针的值:
L = f.tell()
移动文件的指针
各种系统操作
f.seek( 偏移量, 选项 )
选项 =0 时, 表示将文件指针指向从文件头部到 "偏移量"字节处。
选项 =1 时, 表示将文件指针指向从文件的当前位置,向后移动 "偏移量"字节。
选项 =2 时, 表示将文件指针指向从文件的尾部,,向前移动 "偏移量"字节。
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检查是否快捷方式os.path.islink ( filename )
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt')
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
运行shell命令: os.system()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
重命名:os.rename(old, new)
创建多级目录:os.makedirs(r“c:\python\test”)
创建单个目录:os.mkdir(“test”)
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
终止当前进程:os.exit()
获取文件大小:os.path.getsize(filename)
各种目录操作
os.mkdir("file") 创建目录
复制文件:
shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname") 文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")
删除文件
os.remove("file")
删除目录
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir") 空目录、有内容的目录都可以删
转换目录
os.chdir("path") 换路径
ps: 文件操作时,常常配合正则表达式:
img_dir = img_dir.replace('\\','/')
os模块
Python os.path模块常见函数用法(实例+详细注释)