欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 文件操作

程序员文章站 2023-11-21 22:35:22
使用os模块操作文件本身 函数 描述 os.unlink(filePath) 删除文件 os.remove(filePath) 同上 os.rmdir(dirPath) 删除文件夹,必须要是空文件夹才能删除 os.removedirs(dirPath) 同上 os.rename(oldPath,ne ......

 

使用os模块操作文件本身

函数            

描述

os.unlink(filepath)

删除文件

os.remove(filepath)

同上

   

os.rmdir(dirpath)

删除文件夹,必须要是空文件夹才能删除

os.removedirs(dirpath)

 同上

 

 

os.rename(oldpath,newpath)

重命名文件、文件夹。要求2个路径只有文件名部分不同,其余要相同。若目标已存在,会报错。

os.renames(oldpath,newpath)

同上

   

os.mkdir(dirpath)

创建文件夹。如果文件夹已存在,会报错;如果前面的路径不存在,会报错。

os.makedirs(dirpath)

递归创建文件夹。如果前面的路径不存在,会自动创建。

   

os.listdir(dirpath)

列出该文件夹下的所有子文件夹,以列表形式返回。只列出子文件夹,不会列出文件、后代文件夹。可用于遍历。

 

 

os.chdir(dirpath)

 切换到指定目录

os.getcwd()

 获取当前目录(注意是目录)的绝对路径。

如果之前用chdir()切换了路径,此函数得到的是目标路径。

   

os.path.getsize(filepath)          

返回文件大小(字节数)

os.path.exists(path)

检测文件|文件夹是否存在,返回bool值。

这2个方法是path子模块的方法。

 

没有新建文件的方法,但可以通过打开文件来新建文件:打开文件时指定打开模式是  文件不存在时自动创建的模式,这样就能新建文件了。

path均为路径,字符串形式。

 

 

 

 

使用os模块实现文件读写

函数

描述

os.open(filepath,mode)              

打开文件,返回文件描述符(常用fd表示)。常用的mode:

  • os.o_rdonly: 只读

  • os.o_wronly: 只写

  • os.o_rdwr : 读写

  • os.o_append: 追加

  • os.o_creat: 新建然后打开

  • os.o_fsync : 同步写入

os.fdopen(fd, [, mode[, bufsize]]);            

此方法是内置函数open() 的别名。

mode -- 可选,和 python 内置的 open()函数的mode参数一样,可以是r,w,a,r+,w+,a+...

bufsize -- 可选,指定返回的文件对象是否带缓冲:bufsize=0,表示没有带缓冲;bufsize=1,表示该文件对象是行缓冲的;bufsize=正数,表示使用一个指定大小的缓冲冲,单位为byte,但是这个大小不是精确的;bufsize=负数,表示使用一个系统默认大小的缓冲,缺省时使用系统默认大小的缓冲。

 

os.read(fd,n)

 fd:文件描述符,n:最多读取的字节数

返回读取到的字符串

 

os.write(fd, bytes)

写入一个字符串。返回实际写入字符串的长度。

要以字节、字节数组的形式写入。

示例:bytes("ok","utf-8")   将字符串转换为字节

os.lseek(fd, pos, how)

设置文件指针的当前位置。

第三个参数是参考点,seek_set 或 0 表示文件头; seek_cur或 1 表示当前位置; os.seek_end或2表示文件尾。

第二个参数制定相对参考点的偏移量

 os.close(fd)

 关闭文件

 

 

写入示例:

import os
fd=os.open("1.txt",os.o_rdwr)
os.write(fd,bytes("hello\nworld","utf-8"))
os.close(fd)

 

 

读取示例:

import os
fd=os.open("1.txt",os.o_rdwr)
bytes=os.read(fd,1024)  #返回的是字节形式
print(bytes.decode("utf-8"))    #解码,将读取到的字节转换为字符串
os.close(fd)

 

 

 

 

使用python的内置函数实现文件读写

使用open()函数打开文件,创建文件对象

f=open(file[, mode])

 

mode常用的值:

模式         描述

r

只读。缺省mode时默认为r。以r开头的:指针放在文件头,若文件不存在,会报错。

rb

只读,打开二进制文件。

r+

读写

rb+

读写,打开二进制文件

   

w

只写。以w开头的:指针放在文件头,如果文件不存在,会自动创建。

wb

只写,打开二进制文件

w+

读写

wb+

读写,打开二进制文件

   

a

追加。以a开头的:指针放在文件尾,如果文件不存在,会自动创建。

ab

追加,打开二进制文件

a+

追加,可读写。

ab+

追加,可读写,打开二进制文件

 

写不是先清空原有内容,再写入,而是直接覆盖。

比如原来的内容是“hello wolrd”,写入一个“ok”,变为“okllo world”。

写入的内容比原来的长,才会覆盖完。

 

 

file 对象

使用open()打开文件后,会返回一个file对象,表示文件本身。 file 对象常用的方法:

函数       描述

file.flush()

把内部缓冲区的数据立刻写入文件

file.close()

 关闭文件

   

file.read([size])

读取指定的字节数,缺省size或size为负数时,会读取所有内容。

如果是文本文件,返回读取的字符串(如果读取到的是空串,说明已到文件尾);如果是二进制文件,返回读取到的字节。

file.readline()

读取一行,以字符串(如果读取到的是空串,说明已到文件尾)或字节形式返回。

file.readlines()

读取所有行,以字符串列表或字节列表形式返回。

   

file.write(str)

 写入一个字符串,返回实际写入的字符数(注意是字符数)

file.writelines(list|tuple)        

写入一个字符串列表|元组,元素必须是字符串。

写完一个元素后,会在后面接着写,不会自动换行。如果要换行,需要自己加"\n"

   

file.tell()

返回文件指针的当前位置(从文件头开始的字节数)

file.seek(offset[, whence])    

设置文件指针的当前位置。

offset表示偏移量,int型,默认以字符为单位。

whence表示参考点,有3个可用的值:

0   文件头

1   当前位置(默认)

2    文件尾

 

读|写的时候,文件指针会自动后移。

如果以文本文件的方式打开(不带b),则读取时返回字符串|字符串列表,写入时只能写入字符串。

如果以二进制的形式打开(带b),则读取时返回字节,写入时可以写入任何类型(底层都是字节)。

 

 

读取示例:

f=open("1.txt","r+")
#str=f.read(1024)  #读指定的字节数
#str=f.readline()  #读一行
str=f.readlines()  #全读完,作为列表返回,一行一个元素
print(str)
f.close()

 

 

写入示例:

f=open("1.txt","r+")
f.write("hello")   #从头开始覆盖(不是先清空原有内容,再写入,是直接从头开始写,可能覆盖不完)
f.close()

 

 

 

 

pickle 模块

pickle模块可以实现数据的序列化和反序列化。

 

1、序列化:将数据存储到文件中

pickle.dump(对象|变量|值, 文件对象)

 

import pickle
file=open("1.txt","wb")
str="hello"
list=[1,2,3]
pickle.dump("ok",file)  
pickle.dump(str,file)  #可同时序列化多个数据
pickle.dump(1,file)  #需要以二进制形式打开文件。以文本文件形式打开,只能写入字符串类型,不能写入其他类型。
pickle.dump(list,file)
file.close()

 

 

2、反序列化:从文件中读取数据,将数据还原

x = pickle.load(文件对象)
 
import pickle
file=open("1.txt","rb")   #如果只有字符串,可以以文本文件形式打开;如果有其他类型的,就必须以二进制形式打开,否则反序列化会出错
a=pickle.load(file)  
b=pickle.load(file)
c=pickle.load(file)
d=pickle.load(file)
print(a,b,c,d)    #ok hello 1 [1, 2, 3]   反序列化的顺序和序列化的顺序一致
file.close()