python中路径、文件、文件夹的一些基本操作的记录

文件的操作

一般的文件打开方法:

f = open(os.path.join(os.path.dirname(__file__),'17python.txt'))
s = f.readline()  # 一次读取一行内容
print(s)
f.close()

f.close()关闭流,如果是写入文件,不关闭流,可能会造成写入失败或是内容丢失。
使用with open() as f
with open的好处是,不用再使用close()方法,避免因忘记close()方法产生的错误。

open方法中的常用参数,open函数有很多的参数,常用的是file,mode和encoding
name就不解释了,文件名字符串,encoding=‘utf-8’,用来指定打开或写入文件的编码。
open(name[,mode[,buffering]])
其中mode 指定文件打开方式,
读写模式的类型有:
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )

读取及写入文件
read()方法用来读取文件
write()方法用来写入文件

数据保存 一般保存没有什么大问题,主要是读取。 如果保存后是字符串,之前是list 或是 元组(Tuples)保存后就是字符串了,
再读取就需要转换成对应的容器,这里用eval(s)函数方法,效果还是比较不错的。
还有就是大文本在读取的时候如果一次用python read()全部读取的时候会出现莫明的无反应及读取内容不全的情况 ,这里采用分段读取比较好些:

with open(os.path.join(os.path.dirname(__file__),'17python.txt'), mode='r',encoding='utf-8') as f:
    s = ''
    while True:  
        temp = f.read(100)#分段读取,可以解决读取大文件时无法读取的奇怪问题
        if temp == '':  
            break
        s += temp
    print(s)

路径的常用方法

import os
import time
###################################
# 路径的常用方法
###################################
print(__file__) #当前文件的完整地址
print(os.path.abspath('ospathtest.py'))#当前文件的完整地址
print(os.path.dirname(__file__)) #当前目录所属地址
print(os.path.isdir(os.path.dirname(__file__)))# 判断是否为路径
print(os.path.isfile(os.path.dirname(__file__)))# 判断是否为文件
print(os.path.exists(os.path.dirname(__file__)))# 判断文件或是目录是否存在
##################################
p = os.path.join(os.path.dirname(__file__), 'aaa')
os.mkdir(p) # 创建目录
time.sleep(3)# 暂停3秒,这样就可以在左侧目录中看到新建的'aaa'目录了
os.rmdir(p)
print(p)# 组装目录
print(os.path.split(__file__))# 分割路径与文件名

###################################
# os中的一些is get方法
###################################
path = __file__
print(os.path.getatime(path))  #返回最后一次进入此path的时间。
print(os.path.getmtime(path))  #返回在此path下最后一次修改的时间。
print(os.path.getctime(path))  #返回path的大小
print(os.path.getsize(path))  #返回文件大小,如果文件不存在就返回错误
print(os.path.isabs(path))  #判断是否为绝对路径
print(os.path.isfile(path))  #判断路径是否为文件
print(os.path.isdir(path))  #判断路径是否为目录
print(os.path.islink(path))  #判断路径是否为链接
print(os.path.ismount(path))  #判断路径是否为挂载点

文件和文件夹的复制、移动、打包zip

递归删除当前目录下所有文件:

def delfiles(docxpath):
    '''递归删除当前目录下所有文件'''
    docxpath = os.path.join(docxpath)
    if(os.path.exists(docxpath)):
        for file in os.listdir(docxpath):
            file_path = os.path.join(docxpath, file)
            if os.path.isfile(file_path):
                os.remove(file_path)
            else:
                shutil.rmtree(file_path)

将路径下的文件复制到新的目录下:

def copyfiletopath(path1, path2):
    '''将路径下的文件复制到新的目录下'''
    path1 = os.path.join(path1)
    path2 = os.path.join(path2)
    for file in os.listdir(path1):
        file_path = os.path.join(path1, file)
        if os.path.isfile(file_path):
            shutil.copy(file_path, path2)

压缩指定文件夹:

def zipDir(dirpath, outFullName):
    """
    压缩指定文件夹
    :param dirpath: 目标文件夹路径
    :param outFullName: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
    for path, dirnames, filenames in os.walk(dirpath):
        # 去掉目标根路径,只对目标文件夹下边的文件及文件夹进行压缩
        fpath = path.replace(dirpath, '')
        for filename in filenames:
            zip.write(os.path.join(path, filename), os.path.join(fpath, filename))

一些目录和文件操作的其他方法:

# 查找文件
def find_file(path,filename):
    """
    :param path: 文件夹路径
    :param filename: 文件名
    :return: 找到的文件路径列表
    """
    file_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            if file == filename:
                file_path = os.path.join(root, file)
                file_list.append(file_path)
    return file_list

# 查找文件夹
def find_dir(path,dirname):
    """
    :param path: 文件夹路径
    :param dirname: 文件夹名
    :return: 找到的文件路径列表
    """
    file_list = []
    for root, dirs, files in os.walk(path):
        for dir in dirs:
            if dir == dirname:
                file_path = os.path.join(root, dir)
                file_list.append(file_path)
    return file_list



# 删除文件
def del_file(path):
    for root, dirs, files in os.walk(path):
        for file in files:
            os.remove(os.path.join(root, file))


# 删除目录
def del_dir(path):
    for root, dirs, files in os.walk(path):
        for file in files:
            os.remove(os.path.join(root, file))
        for dir in dirs:
            os.rmdir(os.path.join(root, dir))

你可能感兴趣的:(python,python)