Python在实际工作中的运用-基础操作

        本文摘抄自 文件操作与OS基础操作全解析、常见OS基础操作、Python常见OS基本操作 和日常经验总结。

        在 Python 实际工作运用中,对文件的操作都占据了很重要的一部分。本文将深入探讨 Python 中的文件操作以及 os 模块的各种功能,包括文件的打开、读取、写入、关闭,目录的创建、删除、遍历等,同时还会涉及到一些相关的高级主题,如文件指针操作、文件权限管理等。通过对这些内容的学习,读者将能够熟练地在 Python 程序中处理文件和目录相关的任务,为进一步的编程开发打下坚实的基础。

一、文件操作基础

        说到文件操作基础,必须提到io库。它属于Python的内置库(无需额外导入),提供了各种用于输入输出操作的类和函数。除了open函数外,io库还提供了如:read()write()readline()close()等函数和类,用于读写文件和关闭文件等操作‌,下面会逐个介绍。

(一)打开文件:open函数用于打开文件,并返回一个文件对象

file = open(file_path, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file_path:要打开的文件的路径,可以是相对路径或绝对路径。
  • mode:文件打开模式,常见的模式有:
  • 'r':只读模式,用于读取文件内容。如果文件不存在,则会抛出 FileNotFoundError 异常。
  • 'w':只写模式,用于写入文件内容。如果文件不存在,则会创建新文件;如果文件已存在,则会清空原有内容。
  • 'a':追加模式,用于在文件末尾添加内容。如果文件不存在,则会创建新文件。
  • 'x':独占创建模式,用于创建新文件,如果文件已存在,则会抛出 FileExistsError 异常。
  • 'b':二进制模式,与其他模式结合使用,如 'rb' 表示以二进制只读模式打开文件,常用于处理非文本文件,如图片、音频等。
  • 't':文本模式,默认模式。如果要明确指定文本模式,可以使用 'rt' 等。

例如,以只读模式打开一个文本文件:

file = open('example.txt', 'r')

(二)读取文件内容

1、读取全部内容:使用 read() 方法可以一次性读取文件的全部内容。例如:

file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

这里读取了 `example.txt` 文件的全部内容并打印出来,最后关闭了文件。需要注意的是,对于大文件,一次性读取全部内容可能会占用大量内存,不太合适

2. 按行读取:使用 `readline()` 方法可以逐行读取文件内容。例如: 

   file = open('example.txt', 'r')line = file.readline()while line:print(line)line = file.readline()file.close()

这种方式每次读取一行,直到文件末尾。

3. 读取所有行并返回列表:使用 readlines() 方法可以读取文件的所有行,并将每行作为一个元素存储在列表中。例如:

file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:print(line)
file.close()

二、OS基础操作:

首先安装os:

pip install os

os常用属性和方法
os.name    返回操作系统类型
os.environ    以字典形式返回系统变量
os.putenv(key, value)    改变或添加环境变量
os.listdir(path=’ : )    列表形式列出目录下所有目录和文件名
os.getcwd()    获取当前路径
os.chdir(path)    改变当前工作目录到指定目录
os.mkdir(path [, mode = 0777 ] ) =0777])=0777])    创建目录
os.makedirs(path [ mode=0777])    递归创建目录
os.rmdir(path)    移除空目录,不能删除有文件的目录
os.remove(path)    移除文件
os.rename(old, new)    重命名文件或目录
os.stat(path)    获取文件或目录属性
os.chown(path, uid, gid)    改变文件或目录所有者
os.chmod(path, mode)    改变文件访问权限
os.symlink(src, dst)    创建软链接
os.unlink(path)    移除软继接
os.getuid()    返回当前进程UID
os.getlogin()    返回登录用户名
os.getpid()    返回当前进程ID
os.kill(pid, sig)    发送一个信号给进程
os.walk(path)    目录树生成器,生成一个三组 (dirpath, dirnames, filenames)
os.system(command)    执行shell命令,不能存储结果
os.popen(command [, mode=‘r’ [, bufsize]])    打开管道来自shell命令,并返回一个文件对象

os.path相关方法:
os.path.basename(path)    返回最后一个文件或目录名
os.path.dirname(path)    返回最后一个文件所属目录
os.path.abspath(path)    返回一个绝对路径
os.path.exists(path)    判断路径是否存在,返回布尔值
os.path.isdir(path)    判断是否是目录
os.path.isfile(path)    判断是否是文件
os.path.islink(path)    判断是否是链接
os.path.ismount(path)    判断是否挂载
os.path.getatime(filename)    返回文件访问时间截
os.path.getctime(filename)    返回文件变化时间戰
os.path.getmtime(filename)    返回文件修改时间戰
os.path.getsize(filename)    返回文件大小,单位字节
os.path.join(a, *p)    加入两个或两个以上路径,以正斜杜"/"分隔。常用于拼接路径
os.path.split(    分隔路径名
os.path.splitext(    分隔扩展名
 

案例1:改变当前工作目录:

import os# 获取当前工作目录
print("当前工作目录:", os.getcwd())# 改变工作目录
os.chdir('/path/to/new/directory')
print("新的工作目录:", os.getcwd())

案例2:文件删除

# 创建或打开文件
with open('example.txt', 'w') as file:file.write('Hello, world!')# 读取文件
with open('example.txt', 'r') as file:content = file.read()print(content)# 删除文件
os.remove('example.txt')

案例3:查看指定目录下的文件和子目录

# 列出当前目录下的所有文件和目录
print("当前目录下的文件和目录:")
for entry in os.listdir('.'):print(entry)# 判断是否为文件或目录
entries = os.listdir('.')
for entry in entries:full_path = os.path.join('.', entry)if os.path.isfile(full_path):print(f"{entry} 是文件")elif os.path.isdir(full_path):print(f"{entry} 是目录")

案例4:对文件路径进行分割和组合

# 获取文件的绝对路径
print("文件的绝对路径:", os.path.abspath('example.txt'))# 组合路径
print("组合后的路径:", os.path.join('/path/to', 'example.txt'))# 分割路径
print("分割路径:", os.path.split('/path/to/example.txt'))# 获取文件扩展名
print("文件扩展名:", os.path.splitext('example.txt')[1])

案例5:获取系统环境变量

# 获取环境变量
print("环境变量 PATH:", os.environ.get('PATH'))

案例6:运行系统命令

# 运行系统命令
os.system('echo Hello from the system command line!')

案例7:更改文件权限(需要管理员权限)

import stat# 更改文件权限
os.chmod('example.txt', stat.S_IRUSR | stat.S_IWUSR)  # 设置文件只读和可写权限给用户

案例8:获取当前脚本的绝对路径

import os# 获取当前脚本的绝对路径
script_path = os.path.abspath(__file__)
print("当前脚本的绝对路径:", script_path)

主要操作就这些了,其他内容大家慢慢摸索吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22689.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】匿名管道的应用场景-----管道进程池

目录 一、池化技术 二、简易进程池的实现: Makefile task.h task.cpp Initchannel函数: 创建任务: 控制子进程: 子进程执行任务: 清理收尾: 三、全部代码: 前言: 对于管…

使用LangChain构建第一个ReAct Agent

使用LangChain构建第一个ReAct Agent 准备环境 使用Anaconda 安装python 3.10 安装langchain、langchain_openai、langchain_community (安装命令 pip install XXX) 申请DeepSeek API:https://platform.deepseek.com/api_keys(也…

多人协同创作gitea

多人协同创作gitea 在多台设备上协同使用Gitea,主要是通过网络访问Gitea服务器上的仓库来进行代码管理和协作。以下是一些关键步骤和建议,帮助你在多台设备上高效地使用Gitea进行协作: 1. 确保Gitea服务可访问 首先,你需要确保…

【个人开源】——从零开始在高通手机上部署sd(二)

代码:https://github.com/chenjun2hao/qualcomm.ai 推理耗时统计 单位/ms 硬件qnncpu_clipqnncpu_unetqnncpu_vaehtp_cliphtp_unethtp_vae骁龙8 gen124716.994133440.39723.215411.097696.327 1. 下载依赖 下载opencv_x64.tar,提取码: rrbp下载opencv_aarch64.t…

SpringCloud系列教程:微服务的未来(二十五)-基于注解的声明队列交换机、消息转换器、业务改造

前言 在现代分布式系统中,消息队列是实现服务解耦和异步处理的关键组件。Spring框架提供了强大的支持,使得与消息队列(如RabbitMQ、Kafka等)的集成变得更加便捷和灵活。本文将深入探讨如何利用Spring的注解驱动方式来配置和管理队…

学习经验分享【39】YOLOv12——2025 年 2 月 19 日发布的以注意力为核心的实时目标检测器

YOLO算法更新速度很快,已经出到V12版本,后续大家有想发论文或者搞项目可更新自己的baseline了。 代码:GitHub - sunsmarterjie/yolov12: YOLOv12: Attention-Centric Real-Time Object Detectors 摘要:长期以来,增强 …

Pytorch实现之特征损失与残差结构稳定GAN训练,并训练自己的数据集

简介 简介:生成器和鉴别器分别采用了4个新颖设计的残差结构实现,同时在损失中结合了鉴别器层的特征损失来提高模型性能。 论文题目:Image Generation by Residual Block Based Generative Adversarial Networks(基于残留块的生成对抗网络产生图像) 会议:2022 IEEE Int…

后“智驾平权”时代,谁为安全冗余和体验升级“买单”

线控底盘,正在成为新势力争夺下一个技术普及红利的新赛点。 尤其是进入2025年,比亚迪、长安等一线传统自主品牌率先开启高阶智驾的普及战,加上此前已经普及的智能座舱,舱驾智能的「科技平权」进一步加速行业启动「线控底盘」上车窗…

【Node.js】express框架

目录 1初识express框架 2 初步使用 2.1 安装 2.2 创建基本的Web服务器 2.3 监听方法 2.3.1 监听get请求 2.3.2 监听post请求 2.4 响应客户端 2.5 获取url中的参数(get) 2.5.1 获取查询参数 2.5.2 获取动态参数 2.6 托管静态资源 2.6.1 挂载路径前缀 2.6.2 托管多…

树形DP(树形背包+换根DP)

树形DP 没有上司的舞会 家常便饭了&#xff0c;写了好几遍&#xff0c;没啥好说的&#xff0c;正常独立集问题。 int head[B]; int cnt; struct node {int v,nxt; }e[B<<1]; void modify(int u,int v) {e[cnt].nxthead[u];e[cnt].vv;head[u]cnt; } int a[B]; int f[B]…

REACT--组件通信

组件之间如何进行通信&#xff1f; 组件通信 组件的通信主要借助props传递值 分为整体接收、解构接收 整体接收 import PropTypes from prop-types;//子组件 function Welcome(props){return (<div>hello Welcome,{props.count},{props.msg}</div>) }// 对 We…

【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】

文章目录 六大比较类排序算法&#xff08;插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序&#xff09;前言1. 插入排序算法描述代码示例算法分析 2. 选择排序算法描述优化代码示例算法分析 3. 冒泡排序算法描述代码示例算法分析与插入排序对比 4. 希尔排序算法描…

纠错检索增广生成论文

一、摘要 动机&#xff1a;RAG严重依赖于检索文档的相关性&#xff0c;如果检索出错&#xff0c;那么LLM的输出结果也会出现问题 解决方案&#xff1a;提出纠正性检索增强生成&#xff08;CRAG&#xff09;即设计一个轻量级的检索评估器&#xff0c;用来评估针对某个查询检索…

Java NIO与传统IO性能对比分析

Java NIO与传统IO性能对比分析 在Java中&#xff0c;I/O&#xff08;输入输出&#xff09;操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型&#xff0c;而Java NIO&#xff08;New I/O&#xff09;引入了非阻塞和基于通道&#xff08;Channel&#xff09;和缓冲区&a…

easelog(1)基础C++日志功能实现

EaseLog(1)基础C日志功能实现 Author: Once Day Date: 2025年2月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 注&#xff1a;本简易日志组件代码实现参考了Google …

Vue面试2

1.跨域问题以及如何解决跨域 跨域问题&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是指在浏览器中&#xff0c;当一个资源试图从一个不同的源请求另一个资源时所遇到的限制。这种限制是浏览器为了保护用户安全而实施的一种同源策略&#xff08;Same-origin p…

MongoDB应用设计调优

应用范式设计 什么是范式 数据库范式概念是数据库技术的基本理论&#xff0c;几乎是伴随着数据库软件产品的推出而产生的。在传统关系型数据库领域&#xff0c;应用开发中遵循范式是最基本的要求。但随着互联网行业的发展&#xff0c;NoSQL开始变得非常流行&#xff0c;在许多…

Mac安装配置Tomcat 8

一、官网下载 Index of /disthttps://archive.apache.org/dist/ 1、进入界面如下&#xff1a; 2、我们找到Tomcat文件夹并进入 3、找到Tomcat 8并打开 4、找到对应的版本打开 5、打开bin 6、找到“apache-tomcat-8.5.99.tar.gz”并下载 二、配置Tomcat 1、解压已经下载好的…

【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶

论文地址&#xff1a; VLM-AD: End-to-End Autonomous Driving through Vision-Language Model Supervision 摘要 人类驾驶员依赖常识推理来应对复杂多变的真实世界驾驶场景。现有的端到端&#xff08;E2E&#xff09;自动驾驶&#xff08;AD&#xff09;模型通常被优化以模仿…

百度搜索,能否将DeepSeek变成“内功”?

最近&#xff0c;所有的云平台和主流APP都在努力接入DeepSeek。其中&#xff0c;搜索类APP与搜索引擎更是“战况激烈”。那么问题来了&#xff0c;接入DeepSeek已经变成了标准配置&#xff0c;到底应该如何做出差异化&#xff1f;接入DeepSeek这件事能不能实现11大于2的效果&am…