python 文件和目录相关操作
admin
2024-03-15 13:59:11
0

文章目录

  • python 文件和目录相关操作
    • 文件夹和文件路径
      • os模块
      • os.path模块
    • 文件读写
      • 创建和打开文件
      • 关闭文件
      • 读取文件
      • with语句
      • 异常捕获
    • 写入文件

python 文件和目录相关操作

文件夹和文件路径

绝对路径: 是从根目录开始描述的路径。

相对路径:相对于当前目录

.一个点,表示的是当前文件夹;..两个点表示的是上一层文件夹。

os模块

在 Python 中操作文件路径,使用 os 模块,os.path 模块是 os 模块内部的一个子模块,首先导入该模块。

import os

通过os模块提供的通用变量可以获取与系统有关的信息。常用的变量有:

name:用于获取操作系统的类型。

linesep:用于获取当前操作系统上的换行符。

sep:用于获取当前操作系统所使用的路径分隔符。

os模块提供的一些操作目录的函数

  • getcwd() 返回当前的工作目录
import os
print(os.getcwd())
  • chdir(path)把path设置为当前工作目录

目录/文件操作:

  • mkdir(path [,mode])创建目录
os.mkdir(path, mode=0o777) # mode:用于指定数值模式,默认值为0o777。
  • makedirs(path1/path2…[,mode])创建多级目录

  • rmdir(path)删除目录,只有当要删除目录为空时才起作用。

  • removedirs(path1/path2……)删除多级目录

  • os.walk(top[, topdown][, onerror][, followlinks])遍历目录树

    '''
    top:指定要遍历内容的根目录。
    topdown:可选参数,用于指定遍历的顺序。若值为True,表示自上而下遍历(先遍历根目录),若值为 False,表示自下而上遍历。(默认值为True)
    onerror:可选参数,用于指定错误处理方式,默认忽略,使用时指定一个错误处理函数即可。
    followlinks:可选参数,默认情况下将参数值设为True。返回值:返回三个元素(dirpath, dirnames, filenames)
    dirpath: 字符串; dirnames: 列表 ; filenames: 列表
    '''
    
    import os   # 导入os模块
    path = "C:\\demo"       # 指定要遍历的根目录
    print("【",path,"】 目录下包括的文件和目录:")
    for root, dirs, files in os.walk(path, topdown=True):  # 遍历指定目录for name in dirs:            # 循环输出遍历到的子目录print(">",os.path.join(root, name))for name in files:           # 循环输出遍历到的文件print("<",os.path.join(root, name))
    
  • remove(path) 删除文件

    import os
    path = "a.txt"        #目标文件
    if os.path.exists(path):    #判断文件是否存在os.remove(path)        #存在即删除print("删除完毕")
    
  • rename(src,dst) 重命名文件和目录

  • stat(path)获取文件信息

    '''
    stat()函数返回值是一个对象。
    st_mode:         保护模式st_ino:             索引号
    st_dev:            设备名
    st_nlink:           硬链接号(被连接数目)
    st_uid:              用户ID
    st_gid:              组ID
    st_size:            普通文件以字节为单位的大小
    st_atime:          最后一次访问时间
    st_mtime:         最后一次修改时间
    st_ctime:          最后一次状态变化时间。系统不同,返回结果也不同。例如,Windows下返回的是文件的创建时间。
    '''
    

获取目录下的内容:

  • listdir(path)返回指定路径下的文件和目录信息

    import os
    print(os.listdir("."))
    

os.path模块

os.path模块提供的一些操作目录的函数

获取路径:

  • abspath(path)用于获取文件或目录的绝对路径

    import osret = os.path.abspath("demo4.py")
    print(ret)
    
  • relpath(path,start) 用于获取相对于start的路径,start默认是当前路径

    import osret = os.path.relpath("D:\\")
    print(ret)
    

检查路径

  • exists(path) 如果 path 文件或文件夹存在返回 True,否则返回 False;
  • isabs(path) path 是绝对路径返回 True,否则返回 False;
  • isdir(path) path 是文件夹返回 True,否则返回 False;
  • isfile(path) path 是文件返回 True,返回 False;

路径的拼接和分割

  • join(path,name)将目录与目录或者文件名拼接起来
  • splitext()分离文件名和扩展名
  • basename(path)从一个目录中提取文件名
  • dirname(path)从一个路径中提取文件路径,不包括文件名

文件读写

创建和打开文件

创建或打开指定文件并创建文件对象可以使用open()方法,基本语法如下

'''
file :被创建的文本对象
filename:要创建或打开文件的名称,需要使用单引号或双引号括起来。如果要打开文件和当前文件在同一目录下,那么直接写文件名即可,否则则需要指定完整路径。
mode:可选参数,用于指定文件的打开模式。参数表如下。
'''
file = open(filename[,mode[,buffering]])
file = open('message.txt','w',encoding="utf-8")
  • buffering:可选参数,用于指定读写文件的缓冲模式,如果值为0,则表示不缓存;如果值为1,则表示缓存;如果值大于1,则表示缓冲区的大小,默认为缓冲模式。
  • mode 的参数值:
    • r以只读模式打开文件。文件的指针将会放在文件的开头
    • rb以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
    • r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)
    • rb+以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等
    • w以只写模式打开文件
    • wb以二进制格式打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等
    • w+打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限
    • wb+以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等
    • a以追加模式打开一个文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
    • ab以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入
    • a+以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
    • ab+以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写

关闭文件

打开文件后要及时关闭,以免造成对文件不必要的破坏,关闭文件时可以使用文件对象的close()方法实现。

读取文件

  • read(): 读取文件所有内容

    # 文件地址,注意提前在当前目录新建一个 test.txt 文件
    file = "test.txt"
    # 打开文件
    f = open(file, encoding="utf-8")
    # 读取文件全部内容
    read_str = f.read()
    # 关闭文件
    f.close()
    print(read_str)
    
  • for 循环逐行读取文件内容

    # 文件名
    file = "test.txt"
    # 打开文件
    f = open(file, encoding="utf-8")
    # 循环逐行读取
    for line in f:print(line,end="") # 在 txt 文件中,每行的末尾默认有一个换行,print 函数输出也会带一个换行,所以出现 2 个回车符,解决办法,可以使用 print 函数的第二个参数。
    # 关闭文件
    f.close()
    
  • readline() 方法,从文中读取整行信息

    with open('message.txt','r') as file:   # 打开文件number = 0   # 记录行号while True:number += 1line = file.readline()if line =='':break    # 跳出循环print(number,line,end= "\n")  # 输出一行内容
    
  • readlines() 将数据一次性读取到一个列表中

    # 文件名
    file = "test.txt"
    # 打开文件
    f = open(file, encoding="utf-8")
    # 逐行读取
    data = f.readlines()
    # 关闭文件
    f.close()print(data)
    # ['line 1\n', 'line 2\n', 'line 3\n', 'line 4']
    

with语句

打开文件后要及时关闭,如果忘记关闭,可能带来意想不到的问题。另外,如果在文件打开时出现了异常,将导致文件不能关闭。为了更好避免这些问题,可以使用with语句,从而在文件处理时,无论是否出现异常都能保证with语句执行完毕后关闭已打开的文件。

'''
expression:    用于指定一个表达式,可以是打开文件的open()函数。
target:用于指定一个变量,并且将expression的结果保存到该变量中。
with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接使用pass语句代替。
'''
with expression as target:with-body
file = "test.txt"
# 打开文件
with open(file,encoding="utf-8") as f:# 读取文件全部内容read_str = f.read()print(read_str)

异常捕获

读写文件的时候,经常会出现一些 IOError 错误异常,建议写在 try…finally… 异常捕获块中,养成良好的编码习惯。

try:# 打开 hello.txt 文件,指定「只读模式」hello = open('helo.txt', 'r')# 使用 readlines(),读取全部信息con = hello.readlines()print(con)finally:print('出问题了')# 最后需要将文件关闭hello.close()

写入文件

  • 使用write()方法进行文件写入操作

    '''
    file:打开的文件对象。
    string:要写入的字符串。
    '''
    file.write(string)
    

    通过 write方法可以写入单行数据,如果想要写入多行数据,可以在 with 代码块中,写上多个 write方法即可。注意 write方法默认在行尾不添加换行符,如果希望加上换行符,需手动添加。

    file = "test.txt"
    # 打开文件
    with open(file, mode="w", encoding="utf-8") as f:# 写入文件内容f.write("我是即将被写入的内容\n")f.write("我是即将被写入的内容")
    
  • 使用writelines() 方法写入多行数据

    # 创建一个列表
    txtlist = ['line 1\n', 'line 2\n', 'line 3\n']# 写入文件
    with open('hello.txt') as hello :hello.writelines(txtlist)
    

相关内容

热门资讯

建设银行[601939]日常公... 本版导读 2026-02-28 2026-02-28 2026-02-28 2026...
国际油价27日上涨 △资料图 国际油价27日上涨。截至当天收盘,纽约商品交易所4月交货的轻质原油期货价格上涨1.81美元...
深夜,全线大涨!中东局势,骤然... 中东紧张局势骤然升级。 今日晚间,国际黄金、白银、原油价格全线大涨,现货白银大涨超4%,WTI原油、...
*ST东易:公司及管理人已完成... 有投资者向*ST东易(002713.SZ)提问,贵公司的债转股的全部完成了吗? 2月27日,公司回答...
26日起登记领取国投白银LOF... 愉记早前专栏追踪了《国投瑞银白银 LOF 风波:当“程序正确”撞上信任危机》,我们后台收到了百余条留...
GLP-1药物广告为何应重视音... 引言 近年来,随着人们对健康管理的重视,GLP-1类药物逐渐成为糖尿病和肥胖症治疗的热门选择。然而,...
马年新春鄂州城区三大地标联动点... 马年春节假期,南浦路、庾楼、武昌门三大文旅地标联动推出特色新春活动,通过线上线下同频发力、多点联动,...
加拿大第四季度GDP萎缩0.6... 来源:环球市场播报 加拿大经济年末表现趋弱,企业库存大幅下降,推动第四季度实际国内生产总值(GDP)...
原创 美... 美国海关这次突然宣布取消对中国商品的部分关税,你说,这到底是他们为了谁? 是为了美国老百姓,还是为了...
臻宝科技科创板IPO将于3月5... 北京商报讯(记者 马换换 李佳雪)2月27日晚间,上交所官网显示,重庆臻宝科技股份有限公司(以下简称...
【加密货币支持的规则扩大信托银... 【加密货币支持的规则扩大信托银行服务获得美国最终批准】美国银行业监管机构正在扩大贷款机构在国家信托牌...
覆铜板量价齐升 生益科技202... 面对每天上千份上市公司公告该看哪些?重大事项公告动辄几十页几百页重点是啥?公告里一堆专业术语不知道算...
3 个穴位,调帕金森,不费力也... 3 个穴位,调帕金森,不费力也不花钱。只要你手抖、肢体僵硬、走路不稳的时候,按这 3 个穴位,就能舒...
“以租代买”为何受青睐?“万物... 最近一段时间,在最长春节假期的带动下,我国的消费市场活力十足。然而,在“买买买”之外,也有些人把“租...
新一批香港互认基金获批 【导读】新一批香港互认基金获批 中国基金报记者 格林 中国基金报记者获悉,摩根亚洲股票高息基金、富达...
春节假期产销两旺 “白沙好物”... 2月27日,记者从白沙电商中心获悉,今年春节假期,在浓厚的节日消费氛围带动下,“白沙好物”市场持续火...
损失4万5,和解金4100多,... 【文/羽扇观金工作室 陶立烽】 损失将近4万5,和解金才4100多,亏的越多补偿越少?国投瑞银白银...
雷军直播新一代SU7门把手:增... 红星资本局2月28日消息 2月27日,小米创办人、董事长兼CEO雷军在小米汽车工厂里进行直播,与多位...
迎接50万亿存款迁徙|搬家的钱... 开栏语:一场规模高达50万亿的存款迁徙正蓄势待发。站在财富配置的历史拐点,如何审视这波天量资金的洪流...
大连航天医院费用公开透明|下肢... 大连航天医院静脉曲张专科学科带头人杨红东:下肢静脉曲张在人群中发病率大概在7%左右。下肢静脉曲张最主...