Python 常用文件和目录的基本操作

Python 文件和目录的基本操作

文件操作包含打开和关闭、读、写、重命名和删除,分别对应open,close,read,write几个方法。

想对一个文件进行操作,要先使用open方法获取文件的访问权限,该方法的完整定义如下:
open(file,mode='r',buffering =-1,encodig=Node,newline=None,newline=None,closefd=True,opener=None)

file:必须,因为是文件路径(相对或绝对路径)
mode:可选,文件打开模式
buffering:设置缓冲
encoding:一般使用utf-8
errors:报错级别
newline:区分换行符
closefd:传入的file参数类型
opener: 打开文件的一个回调函数,接受被打开文件的文件描述符

文件读取

#读取
file = open('./test.txt','r')
print(file.read())
file.close()
#逐行读取
file = open('./test.txt','r')
for c in file:
	print(c)
file.close()
#分批读取
print('分批读取.....')
with open('./test.txt','r') as f:
  while True:
    c = f.read(1)
    if not c:
      break
    print(c)

文件写入

filePath = './test.txt'

print('a模式写入.....')

def printContent(path):
     with open(path,'r') as f:
         print(f.read())

with open(filePath,'a') as f:
    f.write("追加内容\r\n")
    
printContent(filePath)
#'w'模式
print('w模式写入.....')
with open(filePath,'w') as f:
    f.write("追加内容\r\n")
printContent(filePath)


文件的创建,删除,重命名

os.remove() 用于删除指定路径的文件。
os.rename(src,dst) src: 目录名 dst修改后的名字

import os

def removeTest():
    os.remove('./test.txt')

def renameTxt():
    os.rename('./test.txt','./abc.txt')

目录操作

目录枚举

import os
import sys
os.chdir('/Users/neo/Coding/Python/Demo')
#将程序上下文的当前路径指定到我们的测试目录上来
def listCurrentDirectory(path):
	files = os.listdir(path)
	for name in files:
		print(name)
listCurrentDirectory('.')

如果要获取更加详细的信息
可以使用 os.stat()方法或者

import stat
def listCurrentDirectoryMode(path):
    files = os.listdir(path)
    for name in files:
         pathName = os.path.join(path, name)
         mode = os.stat(pathName).st_mode
         if stat.S_ISDIR(mode):
            # 如果是目录
            print('%s是文件夹' % pathName)
         elif stat.S_ISREG(mode):
            # 如果是文件
             print('%s是文件'%pathName)
         else:
            # 未知类型
            print('�未知目录类型 %s' % pathName)

listCurrentDirectoryMode('.')

用来判断文件类型

目录遍历

使用os.walk()
os.walk(top[,topdown=True[,onerror=Node[,followlinks=False]]])

::Top:: — 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
::Root:: 所指的是当前正在遍历的这个文件夹的本身的地址
::Dirs:: 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
::Files:: 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
::Topdown:: —可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
::onerror:: — 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
Followlinks — 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
测试

def walkDir(path):
        for dirName, subdirList, fileList in os.walk(path):
                print('发现目录: %s' % dirName)
                for fname in fileList:
                        print('\t%s' % fname)

walkDir('.')

修改权限

os.chmod(path,mode)

# 设置文件可以通过用户组执行

os.chmod("./1.txt", stat.S_IXGRP)

# 设置文件可以被其他用户写入
os.chmod("./a/a1/a1.t", stat.S_IWOTH)

目录的重命名、创建和删除

重命名

def renameTest():
        walkDir('.')
        os.rename('1.txt','2.txt')
        try:
                os.rename('./a/a.p','./b2/b.p')
        except FileNotFoundError as e:
                print(e)
        os.renames('./a/a1/a1.t','b/b2/b1.t')
        walkDir('.')

renameTest()

目录

def createPath(p):
    try:
        os.makedirs(p)
    except OSError as e:
        print('创建目录失败', e)
    else:
        print('目录%s创建成功' % p)
#加上判断
def createPath2(p):
    try:
        if not os.path.exists(p):
            os.makedirs(p)
            print('%s创建成功' % p)
        else:
            print('%s已经存在' % p)
    except OSError as e:
        print('创建目录失败', e)


createPath2('./a/')
createPath2('./a/b')


createPath('./a/')

目录删除

def removeDir(path):
    try:
        os.rmdir(path)
    except OSError:
        print("删除 %s 失败" % path)
    else:
        print("删除 %s成功" % path)

你可能感兴趣的:(Python)