一丶文件基本操作

  1.打开文件

    open(文件名(路径),mode = "?",encoding = "字符集")

  2.文件路径:

    1.绝对路径,从磁盘的根目录寻找,或者从互联网上寻找一个路径

      

f = open("e:/abc/里皮.txt",mode = "r".encoding = "gbk")
s = f.read()
print(s)
f.close()

    2.相对路径,相对于当前程序所在的文件夹

../ 返回上一级
f = open("../abc/晓峰",mode = "r",encoding="gbk")
s = f.read()
print(s)
f.close()

  3.创建新文件. 把修改后的内容写入新文件. 删除老文件. 重命名新文件

import os
os.remove("")删除文件
os.rename("源文件", "新文件名") 重命名文件 for line in f:
line 一行数据 with open("文件名") as f:
不需要关闭文件句柄

二丶文件操作

  1.初识文件操作

    1.使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开方式的不同能够执行的操作也会有相应的差异

    2.打开文件的方式:r(只读),w(只写),a(追加),r+(读写),w+(写读),a+(追加写读),rb(只读),wb(只写),ab(追加),r+b,w+b,a+b默认使用的是r(只读模式)

  2.只读操作(r,rb)

  r:

f = open("小护士.txt",mode="r",encoding="utf-8")   #打开小护士.txt文件   编码集为utf-8
content = f.read() #只读
print(content)
f.close #关闭

  rb:

f = open("小护士.txt",mode="rb")
content = f.read()
print(content)
f.close 结果:
b'\xe4\xbd\xa0\xe6\x98\xaf\xe4\xb8\xaa\xe5\x82\xbb\xe5\xad\x90\xe5\x90\x97?'

rb的作用:在读取非文本文件的时候,比如读取MP3.图像.视频等信息的时候就需要用到rb,因为这种数据是没办法直接显示出来的,在后面我们文件上传下载的时候还会用到,还有我们看到的直播都是这种数据.

  3.写模式(w,wb)

    写的时候注意,如果没有文件,则会创建文件,如果文件存在,则将原件中原来的内容删除,再写入新内容

f = open("小护士.txt",mode="rb")
content = f.read()
print(content)
f.close f = open("小娃娃",mode="w",encoding="utf-8")
f.write("金毛狮王") #写入"金毛狮王"
# f.read() #模式是w ,不可执行读操作
f.flush() #刷新
f.close()

    wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据

f = open("小娃娃",mode="wb")
f.write("金毛狮王".encode("utf-8")) #wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据
f.flush()
f.close()

  4.追加(a,ab)

    追加模式下,我们写入的内容会追加在文件的末尾

f = open("小娃娃",mode="a",encoding="utf-8")
f.write("麻花藤的最爱")
f.flush()
f.close()

  5.读写模式(r+,r+b)

    对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完了之后再进行写入

f = open("小娃娃",mode="r+",encoding="utf-8")
content = f.read()
f.write("麻花藤的最爱")
print(content)
f.flush()
f.close()

  6.写读(w+,w+b)

#先将所有的内容清空,然后写入最后读取,但是读取的内容是空的,不常用
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()

  8.读取文件的方法:

    1.read()将文件的内容全部读取出来,弊端;占内存,如果文件过大,容易导致崩溃

f = open("哇卡.txt",mode="r",encoding = "utf-8")
content = f.read()
print(content)

    2.read(n)读取n个字符,需要注意的是,如果再次读取,那么会在当前位置继续读而不是从头读,如果使用的是rb模式,则读取出来的是n个字节

f = open("哇卡.txt",mode="r",encoding="utf-8")
content = f.read(3) #可以形
print(content)

    3.readline()一次读取一行数据,注意:readline()结尾,注意每次读取出来的数据都会有一个\n,所以呢,需要我们使用strip()方法来去掉\n或者空格

f = open("哇卡.txt",mode="r",encoding="utf-8")
content = f.readline()
content2 = f.readline()
content3 = f.readline()
content4 = f.readline()
content5 = f.readline()
content6 = f.readline()
print(content)
print(content2)
print(content3)
print(content4)
print(content5)
print(content6)

    4.readlines()将每一行形成一个元素,放到一个列表中,将所有的内容都读取出来,所以也是容易出现内存崩溃的问题,不推荐使用

f = open("哇卡.txt",mode="r",encoding="utf-8")
lst = f.readline()
print(lst)
for line in lst:
print(line.strip())

    5.循环读取,这种方式是最好的,每次读取一行内容,不会产生内存溢出的问题

f = open("哇卡.txt",mode="r",encoding="utf-8")
for line in f:
print(line.strip())

三丶其它相关操作

  1.seek()

    seek(n) 光标移动到n位置,注意,移动的单位是byte.所以如果是UTF-8的中文部分要是3的倍数.

    通常我们使⽤seek都是移动到开头或者结尾.

    移动到开头: seek(0)

     移动到结尾: seek(0,2) seek的第⼆个参数表示的是从哪个位置进行偏移, 默认是0, 表示开头, 1表示当前位置, 2表示结尾

f = open("小娃娃",mode="r+",encoding="utf-8")
f.seek(0) #光标移动到开头
content = f.read() #读取内容,此时光标移动到结尾
print(content)
f.seek(0) #再次将光标移动到开头
f.seek(0,2) #将光标移动到结尾
content2 = f.read() #读取内容,什么都没有
print(content2) f.seek(0) #移动到开头
f.write("张国荣") #写入信息,此时光标在9 中文3*3个 = 9 f.flush()
f.close()

  2.tell()使用tell()可以帮我们获取到当前光标在什么位置

f = open("小娃娃",mode="r+",encoding="utf-8")
f.seek(0) #光标移动到开头
content = f.read() #读取内容,此时光标移动到结尾
print(content)
f.seek(0) #再次将光标移动到开头
f.seek(0,2) #将光标移动到结尾
content2 = f.read() #读取内容,什么都没有
print(content2) f.seek(0) #移动到开头
f.write("张国荣") #写入信息,此时光标在9 中文3*3个 = 9 f.flush()
f.close() f = open("小娃娃",mode="r+",encoding="utf-8")
f.seek(0) #光标移动到开头
content = f.read() #读取内容,此时光标移动到结尾
print(content) f.seek(0) #再次将光标移动到开头
f.seek(0,2) #将光标移动到结尾
content2 = f.read() #读取内容,什么都没有
print(content2) f.seek(0) #移动到开头
f.write("张国荣") #写入信息,此时光标在9 中文3*3=9 print(f.tell()) #光标位置9 f.flush()
f.close()

  3.截断文件truncate()

f = open("小娃娃",mode="w",encoding="utf-8")
f.write("哈哈") #写入两个字符
f.seek(3)
f.truncate() #删除光标后面的所有内容
f.close() f = open("小娃娃",mode="r+",encoding="utf-8")
content = f.read(3) #读取12个字符
f.seek(4)
print(f.tell())
f.truncate() #后面的所有内容全部都删掉
f.flush()
f.close()

深坑请注意:在r+模式下,如果读取了内容,不论读取内容多少,光标显示的是多少,再写入或者操作文件的时候都是在结尾进行的操作

所以如果想做截断操作,记住了,要先挪动光标,挪动到你想要截断的位置,然后再进行截断关于truncate(n),如果给出了n,则从开头进行截断,如果不给n,则从当前位置截断,后面的内容将会被删除

    4.修改文件以及另一种打开文件的方式

      文件修改:只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文件删除,将新文件的名字改成老文件的名字

import os
with open("小娃娃",mode="r",encoding="utf-8") as f1,\
open("小娃娃_new",mode="w",encoding="utf-8") as f2:
content = f1.read()
new_content = content.replace("冰糖葫芦","大白梨")
f2.write(new_content)
os.remove("小娃娃")
os.rename("小娃娃_new","小娃娃")

    弊端:一次将所有内容进行读取,内存溢出,解决方案:一行一行的读取和操作

import os
with open("小娃娃",mode="r",encoding="utf-8") as f1 ,\
open("小娃娃_new",mode="w",encoding="utf-8") as f2:
for line in f1:
new_line = line.replace("大白梨","冰糖葫芦")
f2.write(new_line)
os.remove("小娃娃")
os.rename("小娃娃_new","小娃娃")

---恢复内容结束---

最新文章

  1. 配置Jenkins使用Gitlab的代码库进行构建
  2. RPC原理详解
  3. C 和 C++ 混合代码 cmath编译出错
  4. ubuntu linux 使用常见问题
  5. Java 装箱 拆箱
  6. Linux实现的IEEE 802.q VLAN
  7. css动画集合地址
  8. Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
  9. struts2类型转换中的错误处理
  10. C语言中指针变量如何向函数中传递
  11. 201521123059 《Java程序设计》第八周学习总结
  12. Spring py登陆模块(包含 记录登陆时间,记录ip,增加积分)
  13. Visual Studio 禁用诊断工具
  14. Arcgis API for JS——普通分屏联动及二三维联动
  15. ThreadLocal总结
  16. Eclipse的一个“bug”
  17. FTP登录提示Can't open data connection for transfer of "/"
  18. SpringBoot 全配置(推荐收藏)
  19. delphi Drag and Drop sample 鼠标拖放操作实例
  20. kettle实现数据库迁移----多表复制向导

热门文章

  1. Pycharm用鼠标滚轮控制字体大小的
  2. printf函数指向串口的方法
  3. std::ostringstream 转std::string
  4. Redis 教程笔记
  5. 你所不知道的html5与html中的那些事(四)——文本标签
  6. how to run faster
  7. (十四)hibernate逆向工程
  8. 一个基于Tp3.2(thinkphp3.2)的工会管理系统
  9. Gym - 100801H Hash Code Hacker (构造)
  10. ue4 tags 与 cast