ch6文件操作和异常处理

news/2024/7/5 2:43:25

os.listdir(path) 函数详解

功能:

os.listdir(path) 函数用于返回指定目录下的所有文件和文件夹的名字列表,但不包括 ...

参数:

  • path: 要列出的目录的路径。

返回值:

一个包含目录下所有文件和文件夹名字的列表。

示例:

import os

path = "/home/user/Desktop/my_folder"

# 列出指定目录下的所有文件和文件夹
files = os.listdir(path)

# 打印文件和文件夹名字
for file in files:
  print(file)

输出:

file1.txt
file2.txt
folder1
folder2

注意事项:

  • os.listdir(path) 函数只返回指定目录下的直接子项,不会递归遍历子目录。
  • 如果目录不存在,os.listdir(path) 函数会抛出 OSError 异常。
  • os.listdir(path) 函数返回的列表顺序是随机的,并非按照文件名排序。

扩展:

  • 可以使用 os.walk(path) 函数递归遍历目录及其子目录。
  • 可以使用 os.path.isfile(path)os.path.isdir(path) 函数判断文件或文件夹是否存在。
  • 可以使用 os.path.join(path, file) 函数拼接文件路径。

参考资料:

  • os.listdir() 函数: https://www.runoob.com/python/os-listdir.html
  • os 模块: https://docs.python.org/3/library/os.html

总结:

os.listdir(path) 函数是 Python 中一个常用的函数,用于列出指定目录下的所有文件和文件夹。

在这里插入图片描述
在这里插入图片描述

collections.deque() 函数详解

功能:

collections.deque() 函数用于创建一个双端队列,也称为双向队列。双端队列是一种特殊的队列,允许从两端插入和删除元素。

参数:

  • iterable: 可选参数,用于初始化队列。如果指定,则将 iterable 中的元素添加到队列中。

返回值:

一个新的双端队列对象。

示例:

from collections import deque

# 创建一个空队列
queue = deque()

# 从队列尾部添加元素
queue.append(1)
queue.append(2)
queue.append(3)

# 从队列头部删除元素
queue.popleft()

# 查看队列中元素
print(queue)

输出:

[2, 3]

deque 对象的常用方法:

  • append(): 将元素添加到队列尾部。
  • appendleft(): 将元素添加到队列头部。
  • pop(): 从队列尾部删除元素。
  • popleft(): 从队列头部删除元素。
  • extend(): 将 iterable 中的元素添加到队列尾部。
  • extendleft(): 将 iterable 中的元素添加到队列头部。
  • rotate(): 旋转队列。
  • index(): 查找元素在队列中的位置。
  • count(): 统计元素在队列中出现的次数。

deque 对象的优势:

  • 双端队列支持从两端插入和删除元素,比列表更灵活。
  • 双端队列在插入和删除元素时效率较高,特别是当队列长度较大时。

deque 对象的应用场景:

  • 实现队列:双端队列可以用来实现队列数据结构,例如先进先出 (FIFO) 队列或后进先出 (LIFO) 队列。
  • 实现缓存:双端队列可以用来实现缓存,例如最近最少使用 (LRU) 缓存或最近最先使用 (LFU) 缓存。
  • 实现滑动窗口:双端队列可以用来实现滑动窗口,例如用于文本分析或数据流分析。

总结:

collections.deque() 函数是 Python 中一个常用的函数,用于创建双端队列。双端队列是一种特殊的队列,允许从两端插入和删除元素,具有较高的效率和灵活性,可以用于实现队列、缓存、滑动窗口等数据结构。

在这里插入图片描述
在这里插入图片描述

os.walk详解

os.walk 是 Python 的 os 模块中用于遍历目录树的函数。它可以帮助您轻松地访问目录及其所有子目录中的文件和文件夹。

功能:

  • 遍历指定目录及其所有子目录。
  • 返回一个生成器,每次迭代都会生成一个包含三个元素的元组:
    • root: 当前正在遍历的目录的绝对路径。
    • dirs: 一个包含当前目录中所有子目录名称的列表(不包含点(.)和双点(…))。
    • files: 一个包含当前目录中所有文件名称的列表。

参数:

  • top: 要遍历的目录的绝对路径(字符串)。

返回值:

一个生成器,每次迭代都会生成一个包含 rootdirsfiles 的元组。

示例:

import os

# 指定要遍历的目录
top_dir = "/home/user/documents"

# 遍历目录树
for root, dirs, files in os.walk(top_dir):
  # 打印当前目录
  print(f"Current Directory: {root}")

  # 遍历子目录
  for dir in dirs:
    print(f"\tSubdirectory: {dir}")

  # 遍历文件
  for file in files:
    print(f"\tFile: {file}")

输出 (示例):

Current Directory: /home/user/documents
   Subdirectory: work
   Subdirectory: personal
   File: budget.txt
Current Directory: /home/user/documents/work
   File: report.docx
   File: presentation.pptx
Current Directory: /home/user/documents/personal
   File: journal.txt
   File: photos.zip

注意事项:

  • os.walk 函数不会对符号链接进行递归遍历。
  • 如果目录不存在,os.walk 函数不会抛出异常,而是会跳过该目录。
  • 遍历过程是深度优先的,即会优先遍历当前目录的所有子目录,然后再返回到父目录遍历其它的子目录。

扩展:

  • 可以通过修改循环逻辑来定制遍历行为,例如只遍历文件、只遍历特定类型的文件等。
  • 可以结合 os.path.join 函数拼接文件路径。
  • 可以使用异常处理来捕获访问权限等错误。

参考资料:

  • os.walk() 方法: https://www.runoob.com/python/os-walk.html
  • os 模块: https://docs.python.org/3/library/os.html

总结:

os.walk 是一个功能强大的函数,可以帮助您高效地遍历目录树并访问文件和文件夹。通过理解其功能和用法,您可以轻松地编写脚本来管理文件系统中的资源。

在这里插入图片描述
在这里插入图片描述

readlines () 和 readline() 函数详解

在写第四道关卡,少了一个s,差距好大
功能:

  • readlines()readline() 函数都是 Python 中用于读取文件内容的函数。
  • 两者都以字符串形式返回文件内容,但它们在读取方式和返回结果上存在一些差异。

readlines():

  • 一次性读取文件所有行,并返回一个包含所有行内容的列表。
  • 适用于需要一次性处理所有文件内容的情况,例如统计文件行数、搜索文件中的关键字等。

readline():

  • 每次读取文件的一行,并返回该行内容。
  • 适用于需要逐行处理文件内容的情况,例如读取文件并逐行输出、分析文件内容等。

示例:

# 使用 readlines() 函数读取文件
with open("my_file.txt", "r") as f:
  lines = f.readlines()

# 统计文件行数
print(len(lines))

# 使用 readline() 函数读取文件
with open("my_file.txt", "r") as f:
  line = f.readline()
  while line:
    # 处理文件内容
    print(line)
    line = f.readline()

输出 (示例):

5
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.

比较:

函数读取方式返回结果适用场景
readlines()一次性读取所有行包含所有行内容的列表一次性处理所有文件内容
readline()每次读取一行该行内容逐行处理文件内容

注意事项:

  • readlines() 函数会将文件所有内容读入内存,因此对于大型文件可能会造成内存压力。
  • readline() 函数每次只读取一行,因此对内存的压力较小,但需要循环读取文件内容,可能会降低效率。

扩展:

  • 可以使用 for 循环逐行读取文件内容,避免一次性读取所有内容。
  • 可以使用 os.path.getsize() 函数获取文件大小,以便根据文件大小选择合适的读取方式。

总结:

readlines()readline() 函数是 Python 中常用的读取文件内容的函数。根据您的具体需求,可以选择合适的函数进行读取操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://lihuaxi.xjx100.cn/news/2109258.html

相关文章

Unicode转码 [ASIS 2019]Unicorn shop1

打开题目 我们买最贵的试试看,结果提示只能输入一个字符 抓包分析一下看看 从中可以发现源代码是如何处理price的 使用的是unicodedata.numeric() 但是我们查看页面源代码,发现页面的编码是utf-8编码 所以,前端html使用的是utf-8&#xff0…

2024全国水科技大会【联合主办】福州水务集团有限公司

福州水务成立于2008年11月,AA信用评级,注册资本21.2亿元。下属各级企业70多家(包括3家国家级高新技术企业、1家A股上市企业)。集团主营供水、排水、环保、温泉文旅、综合服务五大板块,旗下运营自来水厂17座&#xff0c…

python 常用装饰器

文章目录 property的介绍与使用作用使用场景装饰方法防止属性被修改 实现setter和getter的行为 staticmethod 与 classmethod作用代码示例 两者区别使用区别代码演示 abstractmethod参考资料 property的介绍与使用 python的property是python的一种装饰器,是用来修饰…

【No.10】蓝桥杯构造法|两道例题(C++)

什么是构造 构造题 要求解题者通过观察问题的结构和规律,找到一种通用的方法或模式,使得在问题规模增大时,依然能够高效地得到答案。 在解决构造题时,以下几点思考是很重要的: 观察问题规模的增长:了解问题随着规模的增大&…

使用 mypy 做 type check

前言 完残!😂,最近看之前写的 Python 代码老得琢磨这比变量的类型是啥(Python 无类型系统xxx),不愧是我写的! 看段之前写的实现迭代器模式的代码: # 抽象迭代器类 class Iterator(…

HTML世界之标签Ⅴ

目录 一、meter 标签 二、nav 标签 三、noscript 标签 四、object 标签 五、ol 标签 六、optgroup 标签 七、option 标签 八、output 标签 九、param 标签 十、pre 标签 十一、picture 标签 一、meter 标签 <meter> 标签定义度量衡。仅用于已知最大和最小值的…

关于继承是怎么样的?那当然是很好理解之

本文描述了关于继承的大部分知识&#xff0c;但是并不全&#xff0c;每篇博客之间的知识都有互串&#xff0c;所以需要把几篇文章合起来看&#xff0c;学会融会贯通&#xff01; 温馨提示&#xff1a;使用PC端观看&#xff0c;效果更佳&#xff01; 目录 1.继承是什么 2.什…

19.WEB渗透测试--抓包技术(下)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;18.WEB渗透测试--抓包技术&#xff08;上&#xff09;-CSDN博客 Burp含义和内容参考&…