想对一个文件进行操作,要先使用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)