Python 可以对文件进行查看, 创建等功能, 可以对文件内容进行添加, 修改, 删除, 且所使用到的函数在 Python3.5.x 为
open
, 在 Python2.7.x 同时支持
file
和 open, 但是在 3.5.x 系列移除了 file 函数.
一, Python 文件打开方式
文件句柄 = open('文件路径','打开模式')
Nginx_Conf = open('nginx.conf','r',encoding='utf-8')
Ps: 文件句柄相当于于变量名, 文件路径可以写为绝对路径也可以写为相对路径.
二, Python 打开文件的模式
基本的模式
模式 | 说明 | 注意事项 |
---|---|---|
r | 只读模式 | 文件必须存在 |
w | 只写模式 | 文件不存在则创建文件,文件存在则清空文件内容 |
x | 只写模式 | 文件不可读,文件不存在则创建,存在则报错 |
a | 追加模式 | 文件不存在创建文件,文件存在则在文件末尾添加内容 |
带 + 的模式
模式 | 说明 |
---|---|
r+ | 读写 |
w+ | 写读 |
x+ | 写读 |
a+ | 写读 |
带 b 的模式
模式 | 说明 |
---|---|
rb | 二进制读模式 |
wb | 二进制写模式 |
xb | 二进制只写模式 |
ab | 二进制追加模式 |
提示: 以 b 方式打开时, 读取到的内容是字节类型, 写入时也需要提供字节类型
带 + 带 b 的模式
模式 | 说明 |
---|---|
rb+ | 二进制读写模式 |
wb+ | 二进制读写模式 |
xb+ | 二进制只写模式 |
ab+ | 二进制读写模式 |
三, Python 文件读取方式
模式 | 说明 |
---|---|
read([size]) | 读取文件全部内容,如果设置了 size,那么久读取 size 字节 |
readline([size]) | 一行一行的读取 |
readlines() | 读取到的每一行内容作为列表中的一个元素 |
测试的文件名是
"www.baidu.com.conf"
, 文件内容为:
- server {
- listen 80; //80 端口
- server_name www.baidu.com; // 设置域名
- ?
- location / {
- index index.html;
- root /usr/htdocs/linux; // 直接输入 linux.com 是进到了这里 , 一般配置和解析 php 所在目录一直
- }
- ?
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name; // 当前虚拟主机对应的目录
- include fastcgi_params;
- }
- }
- read
代码:
- # 以只读的方式打开文件 www.baidu.com.conf
- f = open("www.baidu.com.conf","r")
- # 读取文件内容赋值给变量 c
- c = f.read()
- # 关闭文件
- f.close()
- # 输出 c 的值
- print(c)
输出结果:
D:\Script\venv\Scripts\python.exe D:/python-new/Python 练习 / Python 文件管理 / file_op.py
- server {
- listen 80; //80 端口
- server_name linux.com; // 设置域名
- ?
- location / {
- index index.html;
- root /usr/htdocs/linux; // 直接输入 linux.com 是进到了这里 , 一般配置和解析 php 所在目录一直
- }
- ?
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name; // 当前虚拟主机对应的目录
- include fastcgi_params;
- }
- }
- readline
代码:
- #!/usr/bin/env python
- # ~*~ coding: utf-8 ~*~
- __author__ = "Zhang.H"
- ?
- Nginx_Conf = open("www.baidu.com.conf","r",encoding="utf-8") # # 以只读模式打开文件
- print(Nginx_Conf.readline()) # 读取第一行
- print(Nginx_Conf.readline()) # 读取第二行
- print(Nginx_Conf.readline()) # 读取第三行
- Nginx_Conf.close() # 关闭文件
输出结果:
D:\Script\venv\Scripts\python.exe D:/python-new/Python 练习 / Python 文件管理 / file_op.py
- server {
- ?
- listen 80; //80 端口
- ?
- server_name www.baidu.com; // 设置域名
- readlines
- #!/usr/bin/env python
- # ~*~ coding: utf-8 ~*~
- __author__ = "Zhang.H"
- ?
- Nginx_Conf = open("www.baidu.com.conf","r",encoding="utf-8") # 以只读的方式打开文件, 将文件所有内容赋值给 Nginx_Conf
- for i in Nginx_Conf.readlines(): # 遍历输出文件内容
- print(i)
结果
D:\Script\venv\Scripts\python.exe D:/python-new/Python 练习 / Python 文件管理 / file_op.py
- server {
- ?
- listen 80; //80 端口
- ?
- server_name www.baidu.com; // 设置域名
- ?
- ?
- ?
- location / {
- ?
- index index.html;
- ?
- root /usr/htdocs/linux; // 直接输入 linux.com 是进到了这里 , 一般配置和解析 php 所在目录一直
- ?
- }
- ?
- ?
- ?
- location ~ \.php$ {
- ?
- fastcgi_pass 127.0.0.1:9000;
- ?
- fastcgi_index index.php;
- ?
- fastcgi_param SCRIPT_FILENAME /usr/htdocs/linux/$fastcgi_script_name; // 当前虚拟主机对应的目录
- ?
- include fastcgi_params;
- ?
- }
- ?
- }
四, Python 文件写入方式
方法 | 说明 |
---|---|
write(str) | 将字符串写入文件 |
writelines(sequence or strings) | 写多行到文件,参数可以是一个可迭代的对象,列表、元组等 |
write
代码:
- #!/usr/bin/env python
- # ~*~ coding: utf-8 ~*~
- __author__ = "Zhang.H"
- ?
- Nginx_Conf = open("www.baidu.com.conf","w",encoding="utf-8") # 以写的模式打开文件 write.txt, 没有则创建, 有则覆盖内容
- Nginx_Conf.write("Nginx_Config") # 在文件内容中写入字符串
- Nginx_Conf.close() # 关闭文件
www.baidu.com.conf 文件内容为:
- Nginx_Config
- writelines
代码:
- #!/usr/bin/env python
- # ~*~ coding: utf-8 ~*~
- __author__ = "Zhang.H"
- ?
- Mysql_conf = open("mysql.conf","w",encoding="utf-8") # 以只写模式打开一个不存在的文件 mysql.conf
- Mysql_conf.writelines(["11","22","33"]) # 写入一个列表
- Mysql_conf.close() # 关闭文件
mysql.conf 文件内容:
112233
五, Python 文件操作所提供的方法
f.close() 关闭文件
f.fileno() 返回文件描述符
f.readline() 从当前指针读取一行
f.readlines() 从当前指针读取到结尾的全部行
f.read() 从当前指针读多少个字节, 没有参数读取全部
f.tell() 告诉当前指针, 是字节
f.seek(offset [whence]) 移动指针, f.seek(0)把指针移动第一行第 0 个字节位置
offset: 偏移量
whence: 位置
0: 从文件头
1: 从当前位置
2: 从文件尾部
f.write(string) 打开文件时, 文件不存在, r,r + 都会报错, 其他模式则不会
f.writelines() 必须是字符串序列, 把字符串序列当作一个列表写进文件
f.flush() 在文件没有关闭时, 可以将内存中的数据刷写至磁盘
f.truncate() 文件截取多少字节保留, 指针后面的内容全部会清空
?
f.name 是返回文件名字, 不是方法, 是属性
f.closed 判断文件是否已经关闭
f.encoding 查看编码格式, 没有使用任何编码, 则为 None
f.mode 打开文件的模式
f.newlines 显示出换行符的, 空为默认 \ n 不显示
六, 同时打开多个文件
为了避免打开文件后忘记关闭, 可以通过管理上下文, 即:
with open('log','r') as f:
代码块
如此方式, 当 with 代码块执行完毕时, 内部会自动关闭并释放文件资源.
在 Python 2.7 及以后, with 又支持同时对多个文件的上下文进行管理, 即:
- with open('log1') as obj1, open('log2') as obj2:
- pass
七, 文件系统功能
import os
目录相关:
os.getcwd() 返回当前工作目录
os.chdir() 切换目录
os.chroot() 设定当前进程的根目录
os.listdir() 列出指定目录下的所有文件名
os.mkdir() 创建指定目录
os.makedirs() 创建多级目录
os.rmdir() 删除陌路
os.removedirs() 删除多级目录
文件相关:
os.mkfifo() 创建管道文件
os.mknod() 创建设备文件
os.remove() 删除文件
os.rename() 文件重命名
os.stat() 查看文件的状态属性
os.symlink() 创建链接文件
os.unlink() 删除链接文件
os.utime() 更新文件时间戳
os.tmpfile() 创建并打开 (w+b) 一个新的
os.walk() 生成目录结构的生成器
访问权限:
os.access() 检验文件某个用户是否有访问权限
os.chmod() 修改权限
os.chown() 修改属主属组
os.umask() 设置默认权限模式
文件描述符:
os.open() 根据文件描述打开
os.read() 根据文件描述读
os.write() 根据文件描述符写
创建设备:
os.mkdev() 创建设备文件
os.major() 获取设备主版本号
os.minor() 获取设备次版本号
用户相关:
os.getuid() 获取当前用户的 uid
os.getgid() 获取当前用户的 gid
文件路径:
os.path.basename() 路径基名
os.path.dirname() 路径目录名
os.path.join() 将 dirname()和 basename()连接起来
os.path.split() 返回 dirname(),basename()元组
os.path.splitext() 返回 (filename,extension) 元组
- os.path.getatime()
- os.path.getctime()
- os.path.getmtime()
os.path.getsize() 返回文件的大小
os.path.exists() 判断指定文件是否存在
os.path.isabs() 判断指定的路径是否为绝对路径
os.path.isdir() 判断是否为目录
os.path.isfile() 判断是否为文件
os.path.islink() 判断是否为链接文件
os.path.ismount() 判断是否为挂载点
os.path.samefile() 判断两个路径是否指向了同一个文件
来源: http://www.bubuko.com/infodetail-2636674.html