python 文件写入相对路径 python相对路径读取文件_文件指针


文章目录

  • 读文件操作
  • 写操作
  • 文件的复制
  • 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模块常见函数用法(实例+详细注释)