Python期末复习 文件管理和处理

本文详细介绍了Python中os模块进行文件和目录管理的方法,包括创建和删除目录、重命名和移动文件、列举文件和目录、以及使用open函数进行文件读写操作。同时讲解了不同模式如r,w,a,b和r+,w+的使用区别。
摘要由CSDN通过智能技术生成

文件管理

Python的目录分隔符:/ 或者 \\

Python使用os模块进行文件管理

创建和删除目录

创建目录

os.mkdir(path)

创建目录前

import os
os.mkdir('期末')

 这里使用的是相对路径,直接在本级目录下创建了新目录

如果目录已存在会报错

import os
os.mkdir('./e')#等同于os.mkdir('e'),./表示本级目录

删除目录

os.rmdir(path)

如果目录非空会报错

import os
os.rmdir('../f')#../表示上级目录,这里表示的是c的路径

 删除文件和重命名

删除文件

os.remove(path)

只能删除文件,删除目录会报错

import os
os.remove('../g')

而删除f文件夹下的f.txt就能成

import os
os.remove('../f/f.txt')

重命名(实际上也可以用于移动)

os.rename(src,dst)

就是将原来文件的文件路径改为目的文件路径,如果修改目录部分会修改文件的位置,如果只修改文件名就相当于重命名

import os
os.rename('../f', '../g/h')

移动f文件家的位置并改名为h

列举当前目录下文件和遍历文件目录

列举当前目录下文件

os.listdir(path),会返回一个函数返回指定路径下的文件和目录列表,是一个包含文件和目录名的字符串列表

import os
print(os.listdir('./'))

遍历目录下所有子目录

os.walk(top): 遍历top所有子目录,自顶向下,返回一个三元组

import os
for root, dirs, files in os.walk('../../../'):
    print(f'当前目录:{root}')
    print(f'子目录列表:{dirs}')
    print(f'文件列表:{files}')
    print('-----------------------------')

 

当前目录和上一级目录

之前我们提到,当前目录可以用相对路径'.'表示,上一级目录可以用'..'表示,再往上就递归地加'../'

除此之外,当前目录还可以用os.curdir,上一级目录还可以用os.pardir表示

import os
print(os.curdir)
print(os.pardir)

当然结果一样

文件路径和文件信息管理

os.path.abspath(path): 返回path绝对路径
os.path.basename(path): 返回path的文件名部分
os.path.dirname(path): 返回path中的目录部分
os.path.exists(path):判断path是否存在
os.path.isfile(path): 判断path是否是文件
os.path.isdir(path): 判断path是否是目录

import os
p='./文件.py'
p2='文件.py'
print(os.path.abspath(p))
print(os.path.basename(r'H:\AI\期末复习\a\b\c\d\文件.py'))
print(os.path.dirname(p))
print(os.path.dirname(p2))
print(os.path.dirname(r'H:\AI\期末复习\a\b\c\d\文件.py'))

在这里,使用了原始字符串(raw string)来处理路径(在字符串前加r),这样可以防止反斜杠 \ 被解释为转义字符

注意最后三个dirname的区别

os.path.getatime(path): 返回文件最后访问时间戳(Access Time)
os.path.getmtime(path): 返回文件最后修改时间戳
os.path.getctime(path): 返回文件创建时间戳
os.path.getsize(path): 返回文件大小,以字节为单位

import os

from datetime import date,datetime
p='./a.txt'
print(os.path.getatime(p))
print(f'最后访问时间: {datetime.fromtimestamp(os.path.getatime(p))}')
print(f'最后修改时间: {datetime.fromtimestamp(os.path.getmtime(p))}')
print(f'创建时间: {datetime.fromtimestamp(os.path.getctime(p))}')

可以通过 datetime.fromtimestamp转化,如果只是需要日期的话可以用date.fromtimestamp,

分别返回的是一个datetime和date对象

如果要转化为字符串可以用     datetime.strftime(变量名,'%Y-%m-%d %H:%M:%S'),而从字符串转回来用datetime.strptime(变量名,'%Y-%m-%d %H:%M:%S')格式可以自己设置

看看掌握程度

#输入一个文件夹和一个时间,找出这个文件夹下(包括子目录)的文件,其最后修改日期大于输入时间,并输出这些文件路径和最后修改时间。
import os
from datetime import datetime
path,date1=input('请输入文件路径和日期,用,分隔日期格式参照:YYYY-MM-DD').split(',')
date=datetime.strptime(date1,'%Y-%m-%d')
def a(path,date):
    for each in os.listdir(path):
        new_path =os.path.join(path,each)
        if os.path.isdir(new_path):
            a(new_path,date)
        else:
            temp=datetime.fromtimestamp(os.path.getmtime(new_path))
            if temp > date:
                print(f'{new_path},  {datetime.strftime(temp,"%Y-%m-%d")}')

a(path,date)

当然也可以返回绝对路径

这里提到的os.path.join()是 Python 中用于连接路径的函数,它会根据操作系统的规范构建路径字符串。这个函数接受一个或多个路径组件作为参数,并返回连接后的路径。

文件处理

open函数

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中mode模式里面,默认为'r':只读模式

'w':写入模式,会覆盖掉已经存在的文件

'x‘创建模式,当文件不存在创建并以写入模式打开,如果文件已经存在会抛出异常FileExistsError

'a'追加模式,文件存在则写入内容追加到文件末尾

'b'二进制模式

't'文本模式,默认

'+'更新模式,

其中r+和w+的区别:

  1. r+ 模式:

    • 如果文件不存在,会抛出 FileNotFoundError
    • 如果文件存在,文件指针会放在文件的开头,可以完整读取原有内容,写入的内容会覆盖原有内容,如果要追加内容,需要使用 a+ 模式。
  2. w+ 模式:

    • 如果文件不存在,会创建新文件。
    • 如果文件存在,会清空原有内容,文件指针放在文件的开头,文件内容已经被删除,不能读取旧内容,可以写入新内容。
    • 如果要追加内容,也可以使用 a+ 模式

read(size=-1):读取size个字符,-1表示不限,下同
readline(size=-1):读取单行里面size个大小的字符
readlines(hint=-1):读取每一行到一个列表中,hint表示行数
write(s):将s写入到文件中
writelines(lines):向文件写入一个列表,不添加分隔符
flush():刷新缓存区,写入到文件中

# 写入文件
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!\n')
    file.write('This is a second line.\n')


# 读取文件
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print("读取整个文件内容:")
    print(content)

# 读取文件的每一行
with open('example.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    print("\n读取每一行内容:")
    for line in lines:
        print(line,end='')  

# 追加内容到文件
with open('example.txt', 'a', encoding='utf-8') as file:
    file.write('This line is appended.')

# 再次读取文件
with open('example.txt', 'r', encoding='utf-8') as file:
    content_after_append = file.read()
    print("\n追加内容后的文件内容:")
    print(content_after_append)

with open('example.txt','x') as file:
    pass

举个readline的例子

temp="""Hello, World!
This is a second line.
This line is appended."""
with open('example.txt','r') as file:
    content=file.read()
    print(content)
with open('example.txt','r') as file:
    print()
    content=file.readline(4)
    print(content)

再举个readLines和writeLines的例子

temp="""Hello, World!
This is a second line.
This line is appended."""
with open('example.txt','r') as file:
    Lines=file.readlines()
    with open('copy.txt','x') as f:
        f.writelines(Lines)

再举个w+和r+的例子

temp="""Hello, World!
This is a second line.
This line is appended."""
with open('example.txt','r+') as file:
    content=file.read()
    print(content)
with open('example.txt','w+') as file:
    print("w+的内容")
    content=file.read()
    print(content)
    file.write(temp)
    print(content)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值