打开文件: f = open("文件路径 / 文件名. 文件格式",mode="r",encoding="utf-8")
f 可以看成一个可以操作文件的句柄.
文件路径分: 相对路径, 绝对路径.
相对路径: 相对的是你当前程序所在的文件夹.(如果要从当前文件夹出来用../ 命令, ../ 返回上一级目录.)
绝对路径: 1. 从磁盘根睡目录找 2. 互联网上的绝对路径.
还可以用 with open("文件路径",mode="") as f:# 此处以, 结尾. 这个命令可以接多个文件.
这样打开文件可以不用 f.close() 关文件.
读 "r".
- f = open("文件名","r")
- ret = f.read()
- f.close()# 打开文件进行操作后都要记得关闭.
在读的模式下没有这个文件会报错.
- f.readline()# 读一行, 会读取换行, 行间有空行是正常的.
- f.readlines()# 读取多行, 相当于一次全部读出来.
因为文件句柄本来就是可以迭代器
所以可以用 for 循环
for line in f:
可以计数来读取想要的行
写 "w".
- f = open("文件名","w",encoding="utf-8")
- f.write("要写入的内容")
- f.flush()# 刷新的意思 (一种好的习惯而已)
- f.close()
在写模式下如果当前目录文件不存在会自动创建文件夹并写入内容.(但如果文件名前加了没有存在的路径就不可以, 会报错)
w 模式在写入之前会清掉之前的内容.(文件操作只要见到 "w" 都会这样.)
追加 "a"
- f = open("文件名","a",encoding="utf-8")
- f.write("要写入的内容")#"a" 就是 append 的意思, 就是有写文件的时候不会覆盖前面的内容后追加到后面.
- f.flush()
- f.close()
追加是一种写模式.
- "rb"
- f = open("文件名",mode="rb")# 此处 encoding 没用, 直接读到的就是字节.
- ret = f.read()
- f.flush()
- f.close()
- print(ret)# 结果如'\xe5\xa5\xbd\xe7\x9a\x84\xe6'
print(ret."utf-8") 可以用这种方法得到解码的后文件内容.
b 是字节的意思
即此模式是读取字节 (byte)
- "wb"
- f = open("文件名","wb")
- f.write("你好")# 这样是写不进的, 会报错, 必须先编码, 因为是对字节进行操作.
- f.write("你好".encode="utf-8")# 这样先编码才行.
- f.flush()
- f.close()
因为写进去是字节, 在 pycharm 里用 utf-8 打开就会还原成原的写了字符.
见 w 写入都会被覆盖.
打开非文本的东西有带 "b" 的模式, 如图片, 视频之类的.
- "r" "w" "a"
- "rb" "wb" "ab"
- "r+"
- f = open("文件名",mode="r+")# 先读后写是对读模式的扩展.
- f.read(3)# 如果先写后读, 写入的会覆盖之前的 (因这光标开始默认在顶格. 会从光标所在位置往后写)
- f.write()# 此处传参数表示读几个字符 (注意: 不是字节).# 继续读的话光标会接着往后读.
- f.flush()# 但是你要写,"r+" 模式只要你读一次, 不管读几个字节, 都会默认光标到末尾.
- f.close()
这种模式先读后写才是安全的.
- "w+"
- f = open("文件名",mode="w+")# 先写后读是对写模式的扩展.
- f.write()# 只要有 w 就会先清空原来的内容
- f.read()# 此处读的话会读不到内容, 因为光标在末尾. 要想读到内容要用 f.seek() 移动光标再读.
- f.flush()
- f.close()
这种模式一般不用.
"rb+" "wb+" "ab+" 就是处理 byta 的和前面的方法是通的.
移动光标 f.seek()# 里面传的参数是表示的 "字节". 表示将光标移动到什么位置. 移动到 xx 如果是 utf-8 移动一个字符要移动 3 个字节
seek(0) 就是移动到开头.
f.seek(0,2) 移动到末尾.# 第一个参数表示移动多少字节, 第二个参数表示从哪个位置开始偏移 0 表示的开头, 1 表示的是当前位置, 2 表示的是末尾.
如果你要反复的读就可以用在 read() 全部读完后, 将光标移到开头 f.seek(0) 重新再读一遍.
f.tell()# 可以获得当前光标所在的位置.
truncate() 截断文件一般用不到.
文件的修改, 不能直接修改文件, 一般都是将文件先读取, 再修改, 再重新写到文件里去.
把新文件名改成老文件, 再把老文件删除来完成文件的修改.
- os.remove("是删除的文件名")# 删除文件
- os.rename("是修改的文件名","文件名")# 重命名文件
如果要写入的文件有路径, 一般先看路径和文件夹是否存在, 如果存在直接写, 如果不存在就创建路径和文件夹.
- import os
- srcfile = "D://test/foot.txt"
- fpath,fname = os.path.split(srcfile)# 分离路径和文件名.
- if not os.path.exists(fpath):
- os.makedirs(fpath)
- f = open("fname","w")
- f.write("写入的内容")
- f.flush()
- f.close()
来源: http://www.bubuko.com/infodetail-2777410.html