Date: 2021.03.24
Author: jwensh

python操作文件及文件夹的方法

操作文件及文件夹的记录

1. 使用os模块

1.1 文件

os.getcwd()  #返回当前工作路径

os.path.isabs()  #判断是否是绝对路径

os.path.isfile()  #检验给出的路径是否是一个文件

os.path.isdir()  #检验给出的路径是否是一个目录

os.sep  #文件的路径分隔符 如:在windows上是 '\'  而在Linux上是 '/'

os.walk()  #文件遍历:def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        print('root_dir:', root)  # 当前目录路径
        print('sub_dirs:', dirs)  # 当前路径下所有子目录
        print('files:', files)  # 当前路径下所有非目录子文件
        
    file_name('D://test')
 

os.path.splitext()  #分离扩展名

os.system()  #运行shell命令:

os.path.exists()  #检验给出的路径是否真地存:

os.getenv() 与os.putenv()  #读取和设置环境变量

os.linesep  #给出当前平台使用的行终止符	如: windowss使用'\r\n'  ,Linux使用'\n'而Mac使用'\r'

os.name #指示你正在使用的平台:	如:对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

os.chmod(file#修改文件权限与时间戳

os.exit()  #终止当前进程 

os.remove()  #删除文件 或空文件夹

os.stat() #获取文件属性

1.2 目录

需要注意:操作的目录必须是空的,删除参考 shutil模块

os.makedirs("file1/file2/file3") 	 #创建文件夹目录. 创建多级目录
os.mkdir("file")    # 创建文件夹. 但是上级目录必须存在

os.copy("oldfile","newfile")   #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

os.rename("oldname","newname")   #重命名文件(目录)    文件或目录都是使用这条命令

os.removedirs()   	# 删除多级目录, 要求必须是空的
os.rmdir("dir")		#只能删除空目录  

os.listdir()  		#返回指定目录下的所有文件和目录名

os.path.split(path)  	#返回一个路径的目录名和文件名   
os.path.dirname()  		#获取路径名
os.path.basename() 		#获取文件名

os.path.getsize(filename) #获取文件大小

os.chdir("path")   换路径

2. shutil模块 对文件和目录操作

shutil是python内置的模块,可以引用,底层也是基于ossys模块的操作

shutil.copytree("olddir","newdir")   #复制文件夹: olddir和newdir都只能是目录,且newdir必须不存在

shutil.move("oldpos","newpos")    #移动文件(目录)

shuil.rmtree(path, ignore_errors=False, onerror=None)  # 递归删除目录树 (慎重使用)

3. 读取文件

encoding #文件编码 
mode #打开模式 
name #文件名 

关于open 模式:
w     以写方式打开,
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r     以读写模式打开
w+     以读写模式打开 (参见 w )
a+     以读写模式打开 (参见 a )
rb     以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab     以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+    以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )

lines = object_file.readlines( )  #读第一行
for line in file_object:  #如果文件是文本文件,还可以直接遍历文件对象获取每行:
     print(line)

3.1 读取单个文件

with open("t.txt",mode="w",encoding="utf-8") as f:  #写文件,当文件不存在时,就直接创建此文件
   pass

3.2.同时读多个文件

  • with
with open(filename1) as fp1, open(filename2) as fp2, open(filename3) as fp3:
    for l1 in fp1:
        l2 = fp2.readline()
        l3 = fp3.readline()
        # do somethingfrom contextlib import nested
with nested(open(filename1), open(filename2), open(filename3)) as (fp1, fp2, fp3):
    for l1 in fp1:
        l2 = fp2.readline()
        l3 = fp3.readline()
        # do something

  • ExitStack (python3)
from contextlib import ExitStack
file_p1 = "/a/a.txt"
file_p2 = "/a/b.txt"
file_p3 = "/a/c.txt"
with ExitStack() as stack:
       files = [stack.enter_context(open(fame, 'r+')) for fame in [file_p1, file_p2, file_p3]]
       # for row in zip(*files):
       for r1,r2,r3 in zip(files[0], files[1], files[2]):
       		pass # rows is now a tuple containing one row from each file

注意:异常处理

参考资料

  1. https://docs.python.org/3.8/library/contextlib.html?highlight=contextlib#module-contextlib
  2. https://docs.python.org/3.8/reference/compound_stmts.html#with
Logo

更多推荐