Python os模块文件操作(一)

一、文件描述符

在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符。

操作系统为了高效管理已经被打开的文件,会给每个打开的文件创建索引,这个索引就叫做文件描述符。

文件描述符是非负整数(索引),用于指代被打开的文件(关闭状态的文件没有)。所有执行i/o操作的系统调用都是通过文件描述符完成的,进程通过文件描述符来访问文件。

在程序(如python)刚启动的时候,默认有3个文件描述符:0(标准输入),1(标准输出),2(标准错误),系统默认使用了 0~2的文件描述符,之后当我们进行 open,create 等操作的时候,文件描述符从3开始,依次添加。

当我们新建create或者打开open一个文件,得到的文件描述符fd是从3开始的,继续新建或打开一个文件,文件描述符继续自增,当释放close之后,文件描述符自减,如果再继续新建,则填补之前减掉的空缺。

既然文件描述符是操作系统(进程)层面的索引,那需要使用文件描述符时怎么获取呢?

在os模块新建或打开一个文件时,会将文件描述符返回给我们。同时,Python提供了获取文件描述符的方法fileno(),使用当前文件f的fileno()方法,可以获取文件对象f的文件描述符,使用起来很方便。在接下来的文件操作中会使用到。

二、os创建文件夹操作

# coding=utf-8
import ostry:# 在当前目录下创建一个文件夹os.mkdir('test_folder')
except os.error:pass
# 获取当前所在目录
print(os.getcwd())
try:# 重命名文件夹os.rename('test_folder', 'os_folder')
except os.error:pass
# 获取目录中的文件
print(os.listdir('os_folder'))

运行结果:

/home/python/Desktop/python_demo/os_test
[]

os.mkdir(folder_name)在当前目录下创建一个指定名字的空文件夹,运行代码后会看到当前目录下多出来一个文件夹。在使用mkdir()时最好try一下,如果同名文件夹存在的时候,创建失败,程序会报错。

os.getcwd()方法会返回当前所在的绝对路径。

os.rename(old, new)方法将指定的文件夹(或文件)名字从old改成new,修改后可以看到文件夹的名字变化了。使用时最好try一下,如果已经有文件夹的名字叫new了,修改失败,程序会报错。

os.listdir(folder_name)返回指定文件夹中有哪些文件夹和文件,不包含隐藏文件,返回结果是一个列表。当然,在我们刚创建的文件夹里,现在还什么也没有,所以返回的是空列表。

三、os创建文件操作

# 改变目录
os.chdir('os_folder')
print(os.getcwd())
# 打开一个文件,返回的是文件的文件描述符
fd = os.open('aaa.txt', os.O_CREAT|os.O_WRONLY)
# 在文件中写入内容
print(fd)
os.write(fd, 'aaaaa'.encode('utf-8'))
# 关闭文件
os.close(fd)
with open('aaa.txt', 'r') as f:# 获取当前文件的文件描述符print(f.fileno())

运行结果:

/home/python/Desktop/python_demo/os_test/os_folder
3
3

运行上面的代码后,在os_folder目录下创建了一个aaa.txt的文件,打开aaa.txt文件,里面的内容是aaaaa。

os.chdir(folder_name)是改变当前所在的目录位置,进入到其他的文件夹中。类似于命令行中的cd。使用os.chdir()后,再使用os.getcwd()查看目录,看到已经进入指定的目录中了。

os.open(file, flags[, mode])可以创建一个不存在的文件或者打开一个已经存在的文件,返回值是文件的文件描述符。

如果打开的文件不存在,则需要给flags参数传值os.O_CREAT表示创建,否则代码会报错。如果是打开一个已经存在的文件,flags传入了os.O_CREAT不会影响打开。

os.open()返回文件描述符,给其他文件操作方法使用,如os.write(),os模块中很多文件的操作都是依靠文件描述符来定位文件。

os.write(fd, str)是在文件fd中写入内容,fd是文件的文件描述符,str是写入文件中的内容。

os.close(fd)是将文件fd关闭,如果不使用close()方法,则这个文件一直处于打开状态。

在前面我们说了,可以使用fileno()获取到文件对象的文件描述符,这里我们使用with open打开上面创建的文件,使用f.fileno()返回了f的文件描述符。

四、os.open()的参数说明

os.open(file, flags[, mode])

file参数是需要打开的文件名。

mode是可选参数,是文件的权限操作,默认是777,我们先不讨论这个参数。

flags的值需要特别注意,它指定可以对打开的文件进行哪些操作,语法比较特殊,必须按照语法要求来传值。

flags的常用值,如果同时使用多个,用管道符 | 隔开:

os.O_CREAT: 创建并打开一个新文件

os.O_RDONLY: 以只读的方式打开

os.O_WRONLY: 以只写的方式打开

os.O_RDWR : 以读写的方式打开

os.O_APPEND: 以追加的方式打开

os.O_NONBLOCK: 打开时不阻塞

os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)

os.O_EXCL: 如果指定的文件存在,返回错误

os.O_SHLOCK: 自动获取共享锁

os.O_EXLOCK: 自动获取独立锁

os.O_DIRECT: 消除或减少缓存效果

os.O_FSYNC : 同步写入

os.O_NOFOLLOW: 不追踪软链接

五、os读取文件内容和删除文件

os.chdir('os_folder')
# 创建一个bbb.txt的文件
fd = os.open('bbb.txt', os.O_RDWR|os.O_CREAT)
# 写入内容
os.write(fd, 'bbbbbbb'.encode('utf-8'))
# 关闭文件
os.close(fd)
# 以只读方式打开
fd = os.open('bbb.txt', os.O_RDONLY)
# 从文件描述符fd中读取最多n个字节
print(os.read(fd, 20).decode('utf-8'))
os.close(fd)
# 删除文件
os.remove('bbb.txt')

运行结果:

bbbbbbb

上面的代码中,新建了一个bbb.txt文件,然后写入内容,供我们读取。

os.read(fd, n)表示从指定的文件中读取n个字节的内容,如果n大于文件中内容的长度,则返回文件中的所有内容,如果文件中的内容已经读完了(多次读时),则返回空字符串。

注意:使用一次os.open()方法打开文件后,如果对文件进行写,接着进行读,读取到的内容是空的。需要将文件关闭,然后重新打开再读,才有内容。相当于读的时候,访问到的还是文件刚打开时的状态,而不是文件写入后的状态。

os.remove(file)方法将指定的文件删除,可以接文件的路径。

更多文件操作参考: https://blog.csdn.net/weixin_43790276/article/details/99213784

Python os模块文件操作(一)相关推荐

  1. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

  2. python os.scandir文件操作

    scandir方法返回了一个DirEntry迭代器对象,它非常轻巧方便,并且能告诉你迭代文件的路径.之前案例中,我们检查了entry是一个文件或者是一个文件夹,与此同时,我们添加它的路径到列表中. 在 ...

  3. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  4. python os模块打开文件_Python 文件操作之OS模块

    with open('filepath') as rename: for line in rename: ... with 命令下 不用使用close()函数关闭文件,打开的文件在with 代码块下有 ...

  5. python os模块下载_Python OS模块目录文件处理

    Python编程语言优势特点比较突出,在Python语言中,有一种标准模块叫OS模块,Python OS模块包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块尤为重要,它允许一个程 ...

  6. Python os模块 -Python系统编程中的操作模块

    Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...

  7. Python OS模块和文件处理

    Python OS模块和文件处理 文件处理 1. 打开和关闭文件 2. 读&写 3. 文件定位 OS模块 1. OS模块简介: 2. OS模块常用函数 3. OS模块常用方法实战 4. 例题练 ...

  8. python os复制文件_使用python os模块复制文件到指定文件夹的方法

    复制一个文件夹的文件到指定目录下 import os import shutil import time start_time = time.time() # 需要被复制的文件夹 old_path = ...

  9. 转载: Python os 模块的功能以及子函数介绍

    原文链接: python之os模块 - 程序生(Codey) - 博客园 https://www.cnblogs.com/cxscode/p/8085326.html 一.Python OS模块介绍 ...

最新文章

  1. 输入法之核心词典构建
  2. Java Junit
  3. PYG教程【五】链路预测
  4. 教辅的组成(网络流果题 洛谷P1231)
  5. 101与金根回顾敏捷个人:(13)敏捷个人和敏捷开发
  6. 苹果天气不显示_热门天气APP被苹果拿下,安卓用户不能再使用
  7. wordpress的下载和安装介绍
  8. vue-router组件重用 路由切换时的问题
  9. Webrtc半小时搭建视频通话 视频会议
  10. pytorch在anaconda下安装
  11. GLSL学习笔记三(片元处理)
  12. 配置核查保密检查等保工具箱态势感知
  13. 耳机煲机软件测试自学,乐味煲耳机软件教程 只需三步轻松煲耳机
  14. 全国公共DNS服务器IP地址汇总
  15. 【计算机架构】什么是云原生?云原生如何解释?What is cloud native?通俗解释云原生
  16. SDOI2015寻宝游戏
  17. Torch常用函数详解
  18. 阿朱访谈:程序员转型期职业选择,是继续做技术高手还...(转)
  19. Oracle错误12154的解决方法
  20. 智能共享口红机方案/案列/APP/小程序/开发

热门文章

  1. 常用模块(json/pickle/shelve/XML)
  2. 请给出linux中查看系统已经登录用户的命令?
  3. 并查集之团伙(codevs)
  4. 使用Lucene索引和检索POI数据
  5. nginx优化(经典)
  6. 一键清除 打印机内无法清除作业
  7. 一行命令快速安装Kubernetes(V1.18)高可用集群
  8. 通俗易懂的5G 入门科普!
  9. 容器编排技术 -- Kubernetes 架构
  10. Docker知识体系--从容器基础-微服务-DevOps-实战演习-Kubernetes简介-KBS基础架构-KBS核心组件-KBS集群