<代码前提>

本章所有代码示例都是以下面代码创造的环境为前提。

本章所有代码测试在单位做的,来自于 lightly 网页版的 IDE,属于Unix?运行结果可能与 Wind 不一样。

代码前提
python import os folder_name = 'test' if not os.path.exists(folder_name): os.mkdir(folder_name) for i in range(1, 5+1): f1 = open(f'test/a{i}.txt', 'w') f1.close() python # 加载 os 模块 # 根文件夹内创建一个名为‘text’的文件夹 # 判断文件夹是否存在 # test 文件夹中创建5个txt文件

1 Flie 对象


1.1 打开/创建文件(open)

所有的文件操作都基于 File 对象,所以处理文件的第一步永远是创建 File 对象。

打开文件并返回file对象给变量
python # 只读 打开f1记事本;报错f6记事本 f1 = open('test/a1.txt', 'r') f6 = open('test/a6.txt', 'r') # 报错 # 只写 打开f2记事本;创建f7记事本 f2 = open('test/a2.txt', 'w') f7 = open('test/a7.txt', 'w') # 新建 # 追加 打开f3记事本;创建f8记事本 f3 = open('test/a3.txt', 'a') f8 = open('test/a8.txt', 'a') # 新建 访问模式 只读 只写 读写
r[默认] w a
二进制 rb[默认] wb ab
r+ w+ a+
二进制 rb+ wb+ ab+
文件不存在 报错 新建文件 新建文件
写入方式 文件指针 开头 开头 结尾追加
+ 路径中有路径不存在则报错;
open 参数很多,了解更多
[Python3 File 方法 菜鸟教程](https://www.runoob.com/python3/python3-file-methods.html)

1.2 关闭文件(close)

文件关闭
python f = open('test/a0.txt', 'w') f.close python # 打开test下的a0.txt文件 # a0.txt 不存在,故新建一个a0.txt文件 # 关闭该文件

1.3 写入文件(write)

写入文件信息
python # 只读方式打开的文件 不能写入数据 f1 = open('test/a1.txt', 'r') f1.write('啊对对对~') # 只写方式打开的文件 写入数据 for i in range(2): f2 = open('test/a2.txt', 'w') f2.write('啊对对对~') f2.close # 追加方式打开的文件 写入数据 for i in range(2): f3 = open('test/a3.txt', 'a') f3.write('啊对对对~') f3.close python # 写入则报错 报错 # 每次写入信息,都会先清空内容再写入 a2.txt: 啊对对对~ # 每次写入信息,都会在结尾追加写入 a3.txt: 啊对对对~啊对对对~

1.4 读取文件(read)

准备代码 — 测试前需输入
python # 准备实例环境 def prepare_poem(): f1 = open('test/a1.txt', 'w+') f1.write('''《无题》 初三班主任题 秋夜静 何处对残灯 啼笑非谁谁识我 坐行梦梦尽缘君 何所谓消沉 风卷雨 雨复卷侬心 心似欲随风雨去 茫茫大海任浮沉 无爱亦无憎''') python
返字符串 — .read() .readline()
python # 读所有 f1 = open('test/a1.txt', 'r') str1 = f1.read() print(str1) # 读指定长度字符 f1 = open('test/a1.txt', 'r') str2 = f1.read(3) print(str2) f1 = open('test/a1.txt', 'r') str2 = f1.readline(3) print(str2) # 读整行 f1 = open('test/a1.txt', 'r') str2 = f1.readline() print(str2) f1 = open('test/a1.txt', 'r') str2 = f1.readline(10) print(str2) python # 返回整首诗 # 返回:《无题 # readline()参数指针没到行末 # 返回:《无题 # 返回:《无题》 # readline()参数指针超过行末 # 返回:《无题》
返列表 — .readlines()
python # 读所有 f1 = open('test/a1.txt', 'r') lis = f1.readlines() print(lis) print(len(lis)) # 按指针指引 部分读取 f1 = open('test/a1.txt', 'r') lis = f1.readlines(10) print(lis) print(len(lis)) python # 返回列表:一个元素为一行诗 # 返回:12 # readlines()参数指针扫过几行,返几行 # 返回:含2元素的列表 # 返回:2

1.5 文件指针(tell/seek)

返回文件指针位置 — .find() .seek()
python # 准备实例环境 f4 = open('test/a4.txt', 'w') f4.write('''abcdefg hijklmn opq rst uvwxyz''') # 直接 返回当前指针位置 print(f4.tell()) # 移动 并返回指针位置 print(f4.seek(0)) f4.close() python # 读、写都会移动指针 30 0
移动(需执行过上面代码)
python f4 = open('test/a4.txt', 'r') # 移动到起点 f4.seek(0) # 等同于:f4.seek(0, 0) print(f4.tell()) # 0 # 移动到终点 f4.seek(0, 2) print(f4.tell()) # 30 # 移动到起点 后3个字符处 f4.seek(3, 0) print(f4.tell()) # 3 # 移动到起点 前3个字符处 f4.seek(-3, 2) print(f4.tell()) # 报错 # 移动到 前3个字符处 f4.seek(-3, 1) print(f4.tell()) # 报错 # 报错信息为:io.UnsupportedOperation python f4 = open('test/a4.txt', 'rb') # 移动到起点 f4.seek(0) # 等同于:f4.seek(0, 0) print(f4.tell()) # 0 # 移动到终点 f4.seek(0, 2) print(f4.tell()) # 30 # 移动到起点 后3个字符处 f4.seek(3, 0) print(f4.tell()) # 3 # 移动到起点 前3个字符处 f4.seek(-3, 2) print(f4.tell()) # 27 # 移动到 前3个字符处 f4.seek(-3, 1) print(f4.tell()) # 24
二进制模式 读取信息
python # 准备实例环境 f4 = open('test/a4.txt', 'rb') # 二进制模式下,读取信息为 b'xxxx' 格式,且保留 \n f4.seek(-3, 2) print(f4.readline()) # 返回:b'rst\n' # 进一步进行数据处理 f4.seek(-3, 2) print(str(f4.readline()).split("'")[1].split("\n")[0]) # 返回:xyz

1.6 刷新缓存区(flush/close)

关闭时自动刷新缓存区 — .close()
python # .close() 会自动刷新缓存区 import time f5 = open('test/a4.txt', 'w+') f5.write('999') time.sleep(5) f5.close() time.sleep(5) python # 此时 a4.txt 没有内容 # 关闭 a4.txt # 此时 a4.txt 有内容了 999
手动刷新缓存区 — .flush()
python # .flush() 会自动刷新缓存区 import time f5 = open('test/a4.txt', 'w+') time.sleep(5) f5.write('666') f5.flush() time.sleep(5) python # 此时 a4.txt 没有内容 # 手动刷新 # 此时 a4.txt 有内容了 666

1.7 返回文件信息(属性)

返回文件信息(属性)
python f4 = open('test/a4.txt', 'w+') # 检测文件是否关闭状态 print(f4.closed) # 返回file对象的模式 print(f4.mode) # 返回file对象的路径 print(f4.name) f4.close() # 检测文件是否关闭状态 print(f4.closed) python False w+ test/a4.txt True

1.8 盲区扩展

没明白怎么用 isatty()方法 用于检查文件流在Python中是否是交互式的
fileno()方法 返回一个整数,这个整数就是文件的文件描述字
truncate()方法 截断文件
用不了 .encoding 属性 只读属性,文件的encoding格式
.newlines 属性
.softspace 属性 只读的布尔属性,供print语句记录自己的状态,file对象自身并不修改或使用该属性。
.errors 属性
(原创)Python文件与文件系统系列(1)—— file 对象 - 王智愚 - 博客园

2 文件处理(os)

os 也可以操作 txt 文件,但是用起来没有 File 对象好用。想了解可详见 4。


2.1 文件操作权限判断(access)

判断文件的操作权限 — .access()
```python import os f1 = open(‘test/a1.txt’, ‘w’) # 判断文件是否存在 print(os.access(f1.name, os.F_OK)) # 判断文件是否可读 print(os.access(f1.name, os.R_OK)) # 判断文件是否可写 print(os.access(f1.name, os.W_OK)) # 判断文件是否可执行 print(os.access(f1.name, os.X_OK)) # 多条件同时判断 print(os.access(f1.name, os.F_OK \ os.R_OK os.W_OK os.X_OK)) ``` python True True True False False

2.2 文件删除(remove/unlink)


删除文件 — .remove()
python import os file_name = 'test/b1.txt' f1 = open(file_name, 'w') f1.close() print(os.access(file_name, os.F_OK)) os.remove(file_name) print(os.access(file_name, os.F_OK)) python # 创建文件,并打开 # 关闭 True # 文件还存在 # 删除文件 False # 文件不存在了
删除文件 — .unlink()
python import os file_name = 'test/b1.txt' f1 = open(file_name, 'w') f1.close() print(os.access(file_name, os.F_OK)) os.unlink(file_name) print(os.access(file_name, os.F_OK)) python # 创建文件,并打开 # 关闭 True # 文件还存在 # 删除文件 False # 文件不存在了

2.3 文件重命名(rename)

文件重命名 — .rename()
python import os f1 = open('test/b1.txt', 'w') f1.close() os.rename('test/b1.txt', 'test/c1.txt') print(os.access('test/b1.txt', os.F_OK)) print(os.access('test/c1.txt', os.F_OK)) python # 创建文件,并打开 # 关闭 # 文件重命名 False # 原文件没了 True # 新文件有了

3 目录处理(os)


3.1 目录创建(mkdir)

文件夹不存在则创建文件夹 — .mkdir()
python import os def folder_create(folder_name): if not os.path.exists(folder_name): # 创建文件夹 os.mkdir(folder_name) folder_create('test') python # 该目录已存在则报错 # 仅创建最后一级目录,上级目录不存在则报错

3.2 目录删除(rmdir)

删除文件夹 — .rmdir()
python import os folder_create('test') folder_create('test/test') print(os.path.exists('test/test')) os.rmdir('test/test') print(os.path.exists('test/test')) python # 自定义函数-创建文件夹 test # 自定义函数-创建文件夹 test/test True # 删除文件夹 False
+ 目录不存在。报错:FileNotFoundError
+ 目录不是末级目录。报错:OSError

3.3 目录重命名(rename)

目录重命名 — .rename()
python import os folder_create('test') folder_create('test/test') os.rename('test/test', 'test/TEST') print(os.path.exists('test/test')) print(os.path.exists('test/TEST')) python # 自定义函数-创建文件夹 test # 自定义函数-创建文件夹 test/test # 文件夹重命名 False # 原文件夹被删掉了 True # 新文件夹存在

3.4 获取文件列表

3.4.1 返回路径单层(listdir)

返回路径单层 — listdir
python import os os.chdir(os.getcwd() + '/test') print(os.listdir()) python ['a7.txt', 'a3.txt', 'a8.txt', 'a2.txt', 'c1.txt', 'a1.txt', 'TEST', 'a4.txt', 'a5.txt'] # 其返回结果是乱序的

3.4.2 返回路径下各层(walk)

返回路径下各层 — walk
python import os # 遍历目录 for root, dirs, files in os.walk(r'.\test'): print('路径:',root) print('路径下目录名:',end='') for name in dirs: print(name,end='') print() print('路径下文件名:',end='') for name in files: print(name,end='') print() print('-'*30) python 路径: .\test 路径下目录名:abc 路径下文件名: ------------------------------ 路径: .\test\a 路径下目录名: 路径下文件名:a1.txta2.txt ------------------------------ 路径: .\test\b 路径下目录名:bb 路径下文件名: ------------------------------ 路径: .\test\b\bb 路径下目录名: 路径下文件名:bb1.txt ------------------------------ 路径: .\test\c 路径下目录名: 路径下文件名: ------------------------------

4 未学习(dlc)

Python3 OS 文件/目录方法 | 菜鸟教程


4.1 打开其他程序(ShellExecute)

win32api.ShellExecute
python import win32api win32api.ShellExecute(0, 'open', 'fpnr_import3.0.xlsx', '', '', 1)
打开其他程序
python如何打开程序_Python中四种运行其他程序的方式_weixin_39626298的博客-CSDN博客