python常用文件操作

markdown 基础用法

半方大(占半个中文)的空白 或 
全方大(占一个中文)的空白 或 
不断行的空白格 或 

常见操作用法

当前目录路径为:D:\myTempFile\testPythonFile

├── file1.py
├── file2.csv
├── file3.txt
├── sub_dir
│   ├── bar.py
│   └── foo.py
├── sub_dir_b
│   └── file4.txt
└── sub_dir_c
    ├── config.py
    └── file5.txt

查询

os.getcwd()     # 得到当前目录
                # D:\myTempFile\testPythonFile
os.listdir(os.getcwd())      # 返回的是一个列表

  • 检验给出的路径是否是一个文件:os.path.isfile()
  • 检验给出的路径是否是一个目录:os.path.isdir()
base_path = r'D:\myTempFile\testPythonFile'

for entry in os.listdir(base_path):
    # 使用os.path.isfile判断该路径是否是文件类型
    if os.path.isfile(os.path.join(base_path, entry)):
        print(entry)
        
for entry in os.listdir(basepath):
    # 使用os.path.isdir判断该路径是否是目录类型
    if os.path.isdir(os.path.join(basepath, entry)):
        print(entry)

创建

  • 创建文件
fp = open("test.txt", 'w')      #直接打开一个文件,如果文件不存在则创建文件
fp.write(str)                   #把str写到文件中,write()并不会在str后加上一个换行符
fp.close()                      #关闭文件。
fp = open(r"2018/10/demo.txt", 'w')
fp.write("hello world!")
fp.close()
  • 创建文件夹
os.mkdir("example_directory")   #如果该目录已经存在,os.mkdir() 将抛出 FileExistsError 异常
  • 创建多个文件夹

os.makedirs(path, mode=0o777)
path – 需要递归创建的目录,可以是相对或者绝对路径。。
mode – 权限模式。

# os.makedirs(r'2021/11/17', mode=0o770)
  • 文件名匹配模式

下面这些是你可以使用的方法和函数:
1.endswith() 和 startswith() 字符串方法
2.fnmatch.fnmatch()

* 1.使用字符串方法
```
for f_name in os.listdir(base_path):
if f_name.endswith('.txt'):
    print(f_name)

for f_name in os.listdir(base_path):
if f_name.startswith('hea'):
    print(f_name)
```
* 2.使用 fnmatch 进行简单文件名模式匹配
```
import fnmatch

for f_name in os.listdir(base_path):
if fnmatch.fnmatch(f_name, '*.txt'):
    print(f_name)
    
# fnmatch.fnmatch() ,这是一个支持使用 * 和 ? 等通配符的函数。例如,使用 fnmatch                查找目录中所有 .txt 文件
for f_name in os.listdir(base_path):
    if fnmatch.fnmatch(f_name, 'data_*_backup.txt'):
        print(f_name)
```

遍历

  • 遍历目录和处理文件

    os.walk(top[, topdown=True[, οnerrοr=None[, 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 的子目录。
    
    os.walk() 在每个循环中返回三个值:
        当前文件夹的名称
        当前文件夹中子文件夹的列表
        当前文件夹中文件的列表
    
for dirpath, dirnames, files in os.walk('.', topdown=True):
    # print(f"dirpath is :  {dirpath}")
    print(f'Found directory---------: {dirpath}')
    for file_name in files:
        print(file_name)

删除

  • 删除
    • 删除目录和文件
# 删除一个文件 删除该文件夹下的 hello.txt
os.remove(os.getcwd()+"\hello.txt")        
  
# 要删除单个目录或文件夹
trash_dir = r'D:\myTempFile\testPythonFile\del'
try:
    os.rmdir(trash_dir)
except OSError as e:
    print(f'Error: {trash_dir} : {e.strerror}')
* 删除完整的目录树(不为空也删除,只能删除目录)
trash_dir = r'D:\myTempFile\testPythonFile\2022'
try:
    shutil.rmtree(trash_dir)
except OSError as e:
    print(f'Error: {trash_dir} : {e.strerror}')

复制移动

  • 复制
    • 复制文件
# 将源文件复制到目标文件,没有目标文件则创建,若有则覆盖
src = r'D:\myTempFile\testPythonFile\hello.txt'
dst = r'D:\myTempFile\testPythonFile\2020.txt'
shutil.copy(src, dst)

# 将源文件复制到目标文件,没有目标文件则创建,若有则覆盖
# 使用 .copy2() 保留有关文件的详细信息,例如上次访问时间,权限位,上次修改时间和标志。
src = r'D:\myTempFile\testPythonFile\hello.txt'
dst = r'D:\myTempFile\testPythonFile\202011.txt'
shutil.copy2(src, dst)
* 复制目录(包括目录下的文件)
# dst = shutil.copytree('data_1', 'data1_backup')
# print(dst)  # data1_backup
# 在此示例中,.copytree() 将 data_1 的内容复制到新位置 data1_backup 并返回目标目录。 目标目录不能是已存在的。
# 它将被创建而不带有其父目录。 shutil.copytree() 是备份文件的一个好方法。

dst = shutil.copytree('2021','2222')
print(dst)
  • 移动文件和目录
# dst = shutil.move('dir_1/', 'backup/')
# print(dst)  # 'backup'
# 将文件夹 9 移动到 10 中,并且返回文件夹 9 的位置
dst = shutil.move('10', '9')
print(dst)

重命名

  • 重命名文件和目录
# 拼接路径
# os.path.join() 函数用于路径拼接文件路径,可以传入多个参数。
# print os.path.join('111','222','333')  #111/222/333
# print os.path.join('/111','222','333') #/111/222/333
# print os.path.join('/111','/222','333') #/222/333
# Python包含用于重命名文件和目录的 os.rename(src,dst):
os.rename('9', '9999')
os.rename('9999', '9')
os.rename('2020', '2022222.txt')

# os.listdir只返回文件名列表没有他们的绝对路径,并os.rename将尝试从当前目录中查找一个文件名,除非给出一个绝对路径。基本上,原来的代码只能在与os.listdir所调用的目录相同的目录下执行。

# 考虑执行下列操作:

import os 
from os.path import join 

path = '/home/gpuuser/Aditya_Nigam/lum2/' 
for filename in os.listdir(path): 
    os.rename(join(path, filename), join(path, filename) + '.jpg') 
    

常见操作一览

检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split()     
    eg os.path.split('/home/swaroop/byte/code/poem.txt') 
    结果:('/home/swaroop/byte/code', 'poem.txt') 
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值