open(操作系统指令)
-
文件路径: 绝对路径或者相对路径, 路径中出现反斜杠会报错, 推荐在引号前加r(全部转义)
-
打开编码方式: 跟随系统, windows默认编码是gbk, linux和mac默认编码是utf-8
-
动作: 读/写/追加, mode默认模式为r(只读模式)
```py r/rb. 只读 w/wb. 只写 a/ab. 追加 r+/r+b 先读后追加(不推荐使用) w+/w+b 先写后读(不推荐使用) a+/a+b 先追加后读(不推荐使用) ```
-
文件句柄常用命名: a , a_sun
常用模式
##r 模式 只读(一般用于操作非文字类文件,encoding参数可以不写)
with open("demo.py", encoding="utf-8", mode="r") as a:
print(a.read())
with open("demo.py", "r") as b:
print(b.read())
##rb 模式 (不做编码转化的只读, 一般用于操作非文字类文件, encoding参数可以不写)
with open("demo.py", "rb") as b:
print(b.read())
##w 模式 只写(1.如果文件不存在创建文件并写入内容,2.如果文件存在则清空并写入内容)
with open("sun.txt", "w") as s:
u = "想要添加的内容"
s.write(u)
##wb 模式 (写入 bytes 格式的文件, 常用于写入图片等非文本文件)
with open("b.txt", mode="wb") as f:
s = "写入内容"
# 使用 utf-8 编码, 将 str 转为 bytes 类型
content = s.encode("utf-8")
# content = s.encode("gbk") # 使用 gbk 编码的 bytes 类型写入, 在默认解码为 utf-8 的时候会显示乱码
f.write(content)
##a 模式 (1.如果文件不存在创建文件并写入内容,2.如果文件存在则追加写入)
with open("sun.txt", "a") as b:
c = "kikukikukiku追加的内容"
b.write(c)
##ab 模式 (追加 bytes 格式的文件)
with open("b.txt", mode="ab") as f:
s = "想要追加写入的内容"
# 使用 utf-8 编码, 将 str 转为 bytes 类型
content = s.encode("utf-8")
# content = s.encode("gbk") # 使用 gbk 编码的 bytes 类型写入, 在默认解码为 utf-8 的时候会显示乱码
f.write(content)
常用方法-读的操作
- 读文件 for 循环 - 逐行读, 末尾自动退出
with open("demo.py", "r") as f:
for i in f:
print(i)
- read() - 读 (1.不传参, 读取全文。2. 传参, 如果是 r 模式, 最小元素为字符, 如果是 rb 模式, 最小元素为字节)
with open("demo.py", encoding="utf-8", mode="r") as a:
#读全文
print(a.read())
# 按最小元素读取
print(a.read(10))
- readline() - 逐行读, 末尾持续返回空行
with open("demo.py", encoding="utf-8", mode="r") as a:
print(a.readline())
- readlines() - 不推荐使用, 可能导致内存溢出
'''
读取全文, 每一行内容作为列表的一个元素, 可能导致内存溢出, 不推荐使用
readlines可以设定读取的最大字节大小 readlines(sizehint)
'''
with open("demo.py", encoding="utf-8", mode="r") as a:
print(a.readlines())
常用方法-写的操作
- write() - 全部写入(全部文本写入:可写单行, 可写多行)
with open("sun.txt", "w") as a:
b = """kiku
kiku
kikujian
"""
a.write(b)
- writeline() - 遍历写入
with open("sun.txt","w") as a:
b = [str(i) for i in range(30)]
a.writelines(b)
- flush() - 立即写入, 刷新缓冲区
'''
刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用该方法。
'''
import sys, time
for i in range(10):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.2)
常见操作
- 判断文件读写操作
# 是否可读
f.readable()
# 是否可写
f.writable()
# 光标是否可操作
f.seekable()
例:
with open("sun.txt" , "r") as a:
print(a.readable())
print(a.writable())
print(a.seekable())
===》
True
False
True
- 光标使用
with open("sun.txt", "r") as a:
#把光标移5位,包含换行符
a.seek(5)
#获取光标当前行内容
a.tell()
#读取内容
print(a.read())
for i in `cat es_ip.txt`
do
echo $i|awk -F '.' '{print $(NF-2)}'
done