python处理文件夹,python 文件,文件夹操作全面解析

这篇博客介绍了Python中文件的读写操作,包括使用`with open`上下文管理器,`flush()`方法确保数据完整性和`os`库进行文件夹判断、创建、删除以及重命名。还讲解了如何遍历目录、获取文件信息并按修改时间排序。
摘要由CSDN通过智能技术生成

操作文件

mode的说明

449975cea7f6

image.png

读写文件

with open('data1.txt', mode='w', encoding="utf-8") as f:

data = '11111e'

f.seek(10) #光标移动到10的位置

f.write(data)

f1 = open(r'D:\project\operate_file\data.txt', "r", encoding="utf-8")

print(f1.readline())

f1.close()

打开多个文件

with open("file_test","r",encoding="utf-8") as f, \

open("file_test2","r",encoding="utf-8") as f2:

...

flush方法

f = open("file_test","w",encoding="utf-8")

f.write("hello\n")

f.write("hello\n")

f.write("hello\n")

f.flush()

一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。

flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。

正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。

至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。

如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。

但有时你需要在关闭前刷新到硬盘中,这时就可以使用 flush() 方法

操作文件夹

判断路径或文件

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

os.path.exists(...)     # 判断是否真实存在

os.path.isdir(...)     # 判断是否是个目录

os.path.isfile(...)     # 判断是否是个文件

工作目录及创建文件夹操作

os.getcwd()      # 获取当前工作目录 等同于os.path.dirname(__file__)

os.chdir(".\\test_mkdir") # 改变工作目录,. 表示本级目录; .. 表示上级目录

os.listdir(...)     # 列出目录下的文件

os.mkdir(...)     # 创建单个目录

os.makedirs(...)   # 创建多级目

删除文件夹、文件

os.rmdir(...) # 删除空文件夹

os.remove(...) # 删除单一文件

shutil.rmtree(...) # 删除文件夹及其下所有文

重命名文件夹/文件

os.rename(oldfileName, newFilename)

复制文件/文件夹

shutil.copyfile("old","new") # 复制文件,都只能是文件

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

shutil.copy("old","new")  # 复制文件/文件夹。经过测试,直接复制文件夹,报权限问题;直接复制文件正常

shutil.move("old","new")  # 移动文件/文件夹至 new 文件夹中

实例

进入到相对文件目录

# os.path.dirname(__file__) 表示得到当前目录路径等同于os.getcwd()

PATH = lambda p: os.path.abspath(

os.path.join(os.path.dirname(__file__), p)

)

# 得到当前目录的t1文件夹

PATH("t1")

# 得到上级目录的t1文件夹

PATH(".../t1")

# 得到上级目录的log文件夹下的t1文件夹

PATH(".../log/t1")

引用公共模块

在不同的项目中,需要引用到当前项目的公用方法

# 得到当前文件绝对路径

abs_path = os.path.abspath(os.path.dirname(__file__))

# 得到公共用例目录,采用切割项目名的方法

common_path = os.path.join(abs_path.split("airtest_auto")[0], "airtest_auto", "util")

# 导入到公用目录

sys.path.append(common_path)

from app_util import *

得到目录下的所有文件和文件夹

for root, dirs, files in os.walk("t3", topdown=False):

for name in files:

print(os.path.join(root, name))

# t3\t2\t2_1\t2_1_1\t2_1_1.air

print("====打印文件======")

for name in dirs:

print(os.path.join(root, name))

# t3\t2\t2_1\t2_1_1

print("====打印目录=========")

得到文件夹下的某些文件

for i in os.listdir("t1"):

if i.find("txt") != -1:

print(os.path.join("t1", i))

得到文件夹下的修改时间排序的文件

# 得到父目录的绝对路径

abs_parent = os.path.abspath("t1")

def sort_file_by_time(file_path):

files = os.listdir(file_path)

if not files:

return

else:

# os.path.getmtime表示文件最近修改的时间

# sorted 里面的reverse为True就是降序,为False就是增序

files = sorted(files, key=lambda x: os.path.getmtime(os.path.join(file_path, x)), reverse=False)

return files

print(sort_file_by_time(abs_parent))

参考如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值