python文件操作
Posted 美丑有命,胖瘦在天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python文件操作相关的知识,希望对你有一定的参考价值。
1. 初识文件操作
-
常规操作(太low:没缩进,还需要关闭,代码没有美感)
f = open(‘path‘,mode=‘r‘,encoding=‘utf-8‘)
f.read()
f.close() -
进阶操作(高逼格:有缩进,不需要手动关闭)
with open(‘path‘, ‘r‘, encoding=‘utf-8‘)as f: f.read()
2. 只读(r, rb)
-
r模式
# f 叫文件句柄. 我们通过这个句柄去操纵这个文件. f = open("21天学会python", mode="r", encoding="UTF-8") content = f.read() # 从文件中读取到数据. 交给前面的content print(content) f.close()
rb模式
# rb 读取字节,除了是字节不用写编码方式其余一样的 f = open("21天学会python", mode="rb") content = f.read() print(content) f.close()
3. 只写(w, wb)
-
w模式
#下面这个栗子有点酸,明明是写模式,你非要读,请自行了结 f = open("歌单", mode="w", encoding="utf-8") content = f.read() # 在w模式下. 去读. 会出错 print(content) f.write("两只老虎 ") f.write("忐忑") f.flush() # 刷新管道 f.close() #正确示范:这歌单很牛逼的,谁听谁知道 f = open("歌单", mode="w", encoding="utf-8") s = ["起风了", "凤舞九天", "冰河时代"] for e in s: f.write(e) f.close()
-
wb模式
#喜欢带b的模式文件操作模式,符合我懒的气质,不用写编码方式 #下面这个操作也是为了绕,非要在字节模式写汉字,完了用pycharm打开文件还TM是汉字,其中的奥秘只有地球人知道。 f = open("歌单", mode="wb") f.write("金毛狮王".encode("UTF-8")) f.flush() f.close()
4. 追加(a, ab)
-
a模式
#已经轻车熟路了,不多介绍了。 f = open("歌单哈哈", mode="a", encoding="UTF-8") f.write("又见炊烟") f.flush() f.close()
-
ab模式
f = open("歌单哈哈.txt", mode="ab") f.write("又见炊烟".encode(‘utf-8‘)) f.flush() f.close()
5. r+读写
-
重头戏r+模式
# 正常用法 f = open("歌单", mode="r+", encoding="UTF-8") # 读 content = f.read() print(content) # 写 f.write("成都") f.flush() f.close() # 非正常用法 f = open("歌单", mode="r+", encoding="UTF-8") # 写 f.write("凉凉") # 读 content = f.read() print(content) f.flush() f.close()
#深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显?示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作.
6. w+写读
-
w+模式
# 先将所有的内容清空. 然后写入. 最后读取. 但是读取的内容是空的, 不常用 f = open("?娃娃", mode="w+", encoding="utf-8") f.write("哈哈") content = f.read() print(content) f.flush() f.close()
7. a+写读(追加写读)
-
a+模式
f = open("?娃娃", mode="a+", encoding="utf-8") f.write("?化腾") content = f.read() print(content) f.flush() f.close() # a+模式下, 不论先读还是后读. 都是读取不到数据的.
# 还有一些其他的带b的操作. 就不多赘述了了. 就是把字符换成字节. 我这么懒就不分享了,欢迎留言分享。
8. 其他操作方法
-
seek和tell好基
#seek的常规操作 f.seek(3) # 移动的是字节单位,在UTF-8文件中. 如果是中文移动的必须是3的倍数 f.seek(0) # 重新回到起点 f.seek(0, 2) # 移动到结尾 #tell的一阳指 print(f.tell()) # 告诉光标在哪里
-
被遗忘的truncate
#直接粘习题了,用法自行体会吧 # h,截取原文件,截取内容:‘葫芦娃,葫芦娃,’ # 1.先用seek,再去截取,有点多此一举 f = open(‘db1/葫芦娃‘, ‘r+‘, encoding=‘utf-8‘) f.seek(24) f.truncate() f.seek(0) print(f.read()) f.flush() f.close() # 2.直接去截取 f = open(‘db1/葫芦娃‘, ‘r+‘, encoding=‘utf-8‘) f.truncate(24) print(f.read()) f.flush() f.close()
9. 文件的修改
-
提前搞一波OS模块
#用了课后练习的代码,还是默写,重点,重点,第三遍不说了! import os with open(‘../db2/alex.txt‘,‘r‘,encoding=‘utf-8‘)as f1, open(‘../db2/alex_new.txt‘,‘w‘,encoding=‘utf-8‘)as f2: for i in f1: new_i=i.replace(‘alex‘,‘SB‘) f2.write(new_i) os.remove(‘../db2/alex.txt‘) os.rename(‘../db2/alex_new.txt‘,‘../db2/alex.txt‘)
10.相对路径和绝对路径
-
绝对路径. 从磁盘根目录寻找文件
#举个栗子: path = "d:/sylar/呵呵.txt"
-
相对路径, 相对于你当前文件所在的位置
#再举个栗子 path = "呵呵.txt"
-
返回上一级:../
-
路径里有 , , 这种有歧义的字母开头需要通过加反斜杠进行转义,或者直接在路径前面加r
# 建议一般不要起这种带特殊意义字母开头的单词 # 第一个斜杠用来转义 path1 = ‘db\test.txt‘ # 加r牛逼,一步到位 path2 = r‘test.txt‘
以上是关于python文件操作的主要内容,如果未能解决你的问题,请参考以下文章