7.5 用python操作文件的3种模式
读的模式打开只能读,写模式打开只能写。
类似于word的只读模式
所以python打开文件得🔝文件
文件打开模式(文本模式)
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="w")
f.write("张三")
f.write("李四")
f.close()[DEV (v.v) sa_cluster@hybrid01 ~]$ cat name_list
张三李四[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$
##文件已经存在就会覆盖
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat name_list
张三
李四
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="w")
f.write("张三\n")
f.write("李四\n")
## 文件只能写不能读,所以读会报错
DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="w")
f.write("张三\n")
f.write("李四\n")
f.read() ##添加了这行
f.close()
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
Traceback (most recent call last):
File "/home/sa_cluster/test.py", line 5, in <module>
f.read()
io.UnsupportedOperation: not readable
####同理,读模式不能写
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
Traceback (most recent call last):
File "/home/sa_cluster/test.py", line 3, in <module>
f.write("张三\n")
io.UnsupportedOperation: not writable
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="r")
f.write("张三\n")
f.write("李四\n")
f.read()
f.close()[DEV (v.v) sa_cluster@hybrid01 ~]$
## 正常读,打印
DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
张三
李四
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="r")
# f.write("张三\n")
# f.write("李四\n")
print(f.read())
f.close()[DEV (v.v) sa_cluster@hybrid01 ~]$
## 只想读部分
比如只想读第一行
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="r")
# f.write("张三\n")
# f.write("李四\n")
print(f.read())
print('-------------')
print(f.readline()) ##光标已经到最后一行了,所以这里为空行
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
张三
李四
-------------
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open("name_list",mode="r")
print(f.readline())
print('-------------')
print(f.read())
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
张三
##这一行是因为readline自己带了换行符,然后print打印出来了
-------------
李四
追加模式
追加的时候也是只能写,不能读,读会报错
追加就是写日志的时候比较适合使用。
7.6 遍历文件
DEV (v.v) sa_cluster@hybrid01 ~]$ cat name_list
张三 深圳 173 48 ##其实每一行最后都有一个\n
李四 北京 182 32
王武 南京 178 64
收到 上海 163 50
发到 西安 183 32
地方 湖北 123 77
如果 宁夏 170 65[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
张三 深圳 173 48
李四 北京 182 32
王武 南京 178 64
收到 上海 163 50
发到 西安 183 32
地方 湖北 123 77
如果 宁夏 170 65
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open('name_list')
for lie in f:
print(lie)
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
['张三 深圳 173 48 \n', '李四 北京 182 32\n', '王武 南京 178 64\n', '收到 上海 163 50\n', '发到 西安 183 32\n', '地方 湖北 123 77\n', '如果 宁夏 170 65']
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open('name_list')
print(f.readlines())
# for lie in f:
# print(lie)
[DEV (v.v) sa_cluster@hybrid01 ~]$
分成列表
[DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open('name_list')
for lie in f:
lie = lie.split()
print(lie)
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
['张三', '深圳', '173', '48']
['李四', '北京', '182', '32']
['王武', '南京', '178', '64']
['收到', '上海', '163', '50']
['发到', '西安', '183', '32']
['地方', '湖北', '123', '77']
['如果', '宁夏', '170', '65']
###拿三四列
DEV (v.v) sa_cluster@hybrid01 ~]$ cat test.py
f = open('name_list')
for lie in f:
lie = lie.split()
# print(lie)
heigt = lie[2]
weight= lie[3]
if int(heigt) >= 170 and int(weight) <= 50:
print(lie)
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$
[DEV (v.v) sa_cluster@hybrid01 ~]$ python3 test.py
['张三', '深圳', '173', '48']
['李四', '北京', '182', '32']
['发到', '西安', '183', '32']