python目录和文件操作(详解)

文章目录

  • 基本文件操作
    • 文件的创建与关闭
    • 写入和读取文件
      • 写入数据
      • 读取数据
    • with上下文管理器的使用
  • 相对路径与绝对路径
  • os模块操作目录
    • 创建目录与路径拼接
    • 获取目录或文件绝的对路径
    • 判断文件或目录的路径是否有效
    • 判断文件是否存在和获取指定目录下的所有文件名
    • 删除目录和文件
    • 重命名文件与目录
    • 遍历目录
    • 其他操作
  • 总结

基本文件操作

ptyhon内置了文件对象,使用文件对象时,可以用内置open()方法创建一个文件对象,然后对文件象进行一些基本的操作。

文件的创建与关闭

file = open(filename, mode='w', buffering=None, encoding=None)
 
# 参数说明
# file : 创建的文件对象
 
# filename : 要创建或者打开的文件名,需要以引号(单双都行,必须是英文的,还要加后缀)括起来,如打开或创建"name.txt"文件
 
# mode : 用于打开文件的模式,如 'w'是写入
 
# buffering : 用于指定读写文件的缓冲模式,默认为缓冲模式,
# buffering = False 表示不缓冲
# buffering = 数字(大于1) 表示缓冲大小
 
# encoding : 默认GBK编码打开文件,如果文件不是GBK编码会报错
# 大家可以指定编码打开文件 一般是常用'utf-8'编码

python目录和文件操作(详解)_第1张图片

在这里插入代码片# 以写入模式创建文件对象,编码为utf-8
file = open('student.txt',mode='w',encoding='utf-8')
 
# 在创建或者打开一个文件后,一定要记着关闭,避免对文件数据造成损失
# 关闭文件可用close()
file.close()

写入和读取文件

写入数据

# 方法使用
file = open('student.txt',mode='w',encoding='utf-8')
file.write(string)
# string : 要写入的数据
 
 
data = '人生苦短,我学python'
file = open('data.txt',mode = 'w', encoding = 'utf-8')
file.write(data)
file.close()
 
# 一定要注意!!!
# 写入文件后一定要用close()方法关闭,否则写入的内容会缺失
# 因为写入的内容会先进入缓存区,并没有直接写入,只有调用close()时才能保证内容全部写入
 
# 如果不想立马关闭文件,也可以用flush()方法把内容写入
# file.flush()

读取数据

# 方法使用
file.read(size)
# size : 读取的字符个数,如果省略则读取所有
# 读取上面写入的内容
file = open('data.txt', mode='r', encoding='utf-8')
print(file.read(5))  # 人生苦短,
 
# 把剩下的内容读取完
print(file.read()) # 我学python
file.close()
 
 
# file.seek(offset)
# offset : 用于指定移动的字符数 跟read()有所不同,utf-8编码中汉字占三个字符,GBK编码汉字占(包括中文标点符号)2
# 个字符,无论采用何种编码英文字母和数字都是按一个字符计算。
file = open('data.txt', mode='r', encoding='utf-8')
file.seek(15)  # 人生苦短,
print(file.read(3))  # 我学p
file.close()
 
# file.readline() 读取一行
file = open('data.txt', mode='r', encoding='utf-8')
file.readline() # 人生苦短,我学python
file.close()
 
# file.realines() 读取全部行 跟read()差不多,但可以遍历
data = '人生苦短,我学python\n人生苦短,我学python'
 
file = open('data.txt', mode='w', encoding='utf-8')
file.write(data)
 
# 可以遍历
file = open('data.txt', mode='r', encoding='utf-8')
for i in file.readlines():
    print(i)
file.close()
 
 
 

with上下文管理器的使用

有时候,我们打开文件后,可能会忘记关闭,这样可能会造成我们数据缺失以及安全问题。为了避免此类问题的发生,可以用python提供的with语句,上下文管理器,无论是否出现异常,都会关闭已经打开的文件。

# with open(file_name,mode,encoding) as f:
#   	f.write(string) # 执行读写的操作
# 其实没有什么变化 只增加了一个自动打开和关闭文件的操作
# as 表示重命名 
 
data = '人生苦短,我学python'
 
# 写入数据
with open('data.txt', mode='w', encoding='utf-8') as g:
    g.write(data)
 
# 读取数据
with open('data.txt', mode='r', encoding='utf-8') as f:
    print(f.read())
 
# 追加数据
with open('data.txt', mode='a', encoding='utf-8') as n:
    n.write(data)
 
 
 
 
 
 

在这里提醒大家一定要注意文件打开的模式!!!
mode的模式注意!!!
r 读取文件,文件必须存在,否则会报错
a 往内容后面追加新内容 文件存在就添加 不存在就创建文件再添加
w 写入内容 如果文件存在,文件里有内容,原来的内容会被新内容覆盖, 不存在就创建文件再写入

相对路径与绝对路径

在介绍os模块操作之前,先讲一下文件路径,什么是路径呢?
在电脑中,我们的文件会储存再磁盘中,如D:\Typora\resources\appsrc\editor,就是一个文件的储存路径,常用斜杠“\”分隔每一个区间,斜杠后面是前面的子项。

  • 相对路径
    相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系,比如有一个目录total,在该目录下保存着文件student.txt文件,那么我们可以通过"total\student.txt"打开这个文件,相对路径就是相对某文件而言,是可变的。
    在python中” \ “属于特殊字符,需要转义,两个反斜杠“ \ ”,等于一个反斜杠“ \ ”。当然我们也可以用"r"进行转义,在字符串面前用“r”,如r"total\student.txt"
with open(r'total\student.txt',mode='w',encoding='utf-8') as f:
   f.write(data)
  • 绝对路径
    绝对路径就好理解了,就是文件储存的路径,通常是从盘符开始的路径,比如D:\Thunder\Profiles\DownloadData,从盘符开始,直达目标文件。

os模块操作目录

在python中,用内置模块os以及子模块os.path用于对目录和文件进行操作,在使用os模块记得用import导入。
python目录和文件操作(详解)_第2张图片

python目录和文件操作(详解)_第3张图片

创建目录与路径拼接

  • 创建目录
import os
 
# mkdir(name) name为要创建的文件名
# 文件存在就会报错
os.mkdir('name')
  • 创建多级目录
import os
 
# makedirs(path1\path2......) 要\\ 或者字符串前面加r
os.makedirs(r'name\name1\name2')
os.makedirs('names\\names1\\names2')
 

python目录和文件操作(详解)_第4张图片

  • 路径拼接
import os.path
 
# os.path.join(name1,name2...) 如果有多个盘符开头的路径 以最后的为准
# 拼接不会检查路径是否有效
name1 = 'D:\\Users\\wo\\top'
name2 = 'names'
print(os.path.join(name1, name2))
# D:\Users\wo\top\names
 
name3 = 'C:\\u'
name4 = 'name2'
print(os.path.join(name1, name2, name3, name4))
# C:\u\name2
 

获取目录或文件绝的对路径

  • 返回当前文件路径
import os
 
# getcwd()返回当前文件的绝对路径
print(os.getcwd())
 
  • 获取指定文件或目录的绝对路径
import os.path
 
# os.path.abspath(name) name 获取的文件名
print(os.path.abspath('names'))
 
# C:\Users\政\Desktop\文件夹操作\names

判断文件或目录的路径是否有效

import os.path
 
# os.path.isdir(name) name为文件名 相对与绝对路径都行
print(os.path.isdir('names'))
 
# os.path.isfile(name) name为文件名 相对与绝对路径都行
print(os.path.isfile('data.txt'))
 

判断文件是否存在和获取指定目录下的所有文件名

  • 判断文件是否存在
import os.path
# 先创建目录
os.mkdir('name')
 
# 判断目录或文件是否存在 存在返回True 不存在返回False
# 相对与绝对路径都可以
print(os.path.exists('name'))
  • 获取指定目录下的所有文件名
import os
 
# 获取当前目录的路径
file_add = os.getcwd()
 
# os.listdir(path) 
# 获取指定目录下的所有文件
print(os.listdir(file_add))
 

删除目录和文件

 
import os
 
# 先创建目录
os.mkdir('name')
os.makedirs('name1\\name2\\name3')
 
# 再删除目录
# os.rmdir(name) name为目录名
os.rmdir('name')
 
# 删除多级目录
# os.removedirs(path1\path2......)
os.removedirs('name1\\name2\\name3')
 

重命名文件与目录

import os
 
# 创建目录
os.mkdir('name')
 
# 在目录name中创建文件name1
with open('name\\name1', mode='w') as f:
    f.write('a')  # 写入字符串'a'
 
# os.rename(str,dst) str要重命名的文件 dst要命名的文件名字
# 重命名目录
os.rename('name', 'student')
os.rename('student\\name1', 'student1')
 

遍历目录

import os
 
# 创建一个根目录
os.mkdir('a')
# 在根目录创建3个在目录
for i in range(3):
    os.mkdir(f'a\\name{i}')
    # 在每一个子目录创建3个文件
    for k in range(0, 3):
        with open(f'a\\name{i}\\' + f'age{k}.txt', mode='w') as f:
            f.write('')
 
# os.path.walk(top,topdown)
# top 指定遍历的目录
# topdown 用与指定遍历的顺序,如果值为True 则优先遍历根目录(自上而下)
# 如果值为False,先从最后一级目录开始(自下而上) 默认为True
 
for g in os.walk('a'):
    print('路径:', g[0])
    print('目录名:', g[1])
    print('文件名:', g[2])
 

其他操作

  • 分离文件名与扩展名
import os.path
 
# os.path.splitext() 分离文件名与扩展名
 
name = 'file.txt'
print(os.path.splitext(name))
  • 从一个目录中提取文件名
import os.path
 
# os.path.basename(path) path 为目录路径
 
name = 'name\\file.txt'
print(os.path.basename(name))
 
  • 从一个路径中提取文件路径,不包括文件名
import os.path
 
# os.path.dirname(path) path 为目录路径
 
name = 'name\\file.txt'
print(os.path.dirname(name))
 

总结

本文写了用python中的内置函数open创建读写文件和用内置模块os来创建文件、目录和对文件、目录的一些基本操作以及用with自动打开关闭文件。在平常的练习中大家可以多多练习,不一定要把这些方法都记下来,多查多练,自然而然都记住了。文章如有错误,请指正,最后谢谢大家!

你可能感兴趣的:(python模块的使用,python,开发语言)