一. 文件读取
f = open("123456", mode = "r", encoding = "utf-8")
"123456": 文件路径
1. 绝对路径 c:/abc/123.txt https://www.xxxxx.com/qwe.jpg
2.相对路径 ../../abc/def (用的更多, 因为把文件放在文件夹一起发送时, 在另一个电脑运行时, 不会出错)
mode: r w a r+ w+ a+ rb wb ab r+b w+b a+b
encoding: utf-8 gbk unicode......
s = f.read() 全部读取
print(s)
f. close()
f = open("123456", mode = "r", encoding = "utf-8")
for line in f:
print(line.rstrip())
f,close() 读取每一行
f = open("123456", mode = "r", encoding = "utf-8")
lst = f.readlines() 读取每一行组成的列表(这里是.readlines, 是读取全部的行, 并组成一个列表)
(如果是.readline就只读取文件的第一行, 读取的结果是一个字符串. 如果这时光标位置不在遗憾的第一个字符前, 从光标位置读到这一行的最后一个字符或\n)
print(lst)
f.close()
二. 文件写入
f = open("123456", mode = 'w', encoding = "utf-8")
f.write("999999999") 把文件123456的内容全部清除, 重新写进字符串999999999
f.flush() 把写进文件123456的所有字符全部写进去
f.close()
f = open("123456", mode = "a", encoding = "utf-8")
f.write("\n66666666666") 把\n6666666666666添加到文件123456的最后一个字符的后面(文档结尾)
f.flush()
f.close()
a = open("d:/123.jpg", mode = 'rb') 读取一个图片时, 用r w a,Pycharm会选取一种解码方式, 如果是图片格式, Pycharm会无法解码, 导致报错, 所以用rb和wb来读取和写入字节
b = open('d:/456.jpg', mode = 'wb') Pycharm会自动创建一个456的图片文件
for i in a:
b.write(i) 对a文件进行遍历, 把a的每一行字节都写进b
b.flush()
a.close()
b.close()
三. 读写, 写读, 追加读模式:
r+ 读写模式, 先读后写
读取后写入, 都会变成在文档最末尾写入
写入时, 如果不是在最末尾写入, 会变成插入, 会替代掉后面的字节
如果先写后读, 写的内容会从第一个字符开始覆盖掉原来文件的字符串的内容, 覆盖的长度按字节来算, 如果写入3个英文字母, 会覆盖掉一个中文字符, 然后从最后一个被覆盖的字符的后面开始读.
f = open('123456', mode = 'r+', encoding = 'utf-8')
s = f.read(3) 读取3个字符, 不是3个字节, 1个中文或1个字母或1个换行都算一个字符
print(s)
s = f.read() 会在刚才读完后的光标处继续往后读取完所有文件的字符
print(s)
f.write('4s3d5g4s35g') 写入的时候光标会直接移到最后, 然后把4s3d5g4s35g添加在文件最后, 这时光标还是在文件最末尾
print(f)
f.flush()
f.close()
w+写读模式, 先写后读:
如果一开始就读取, 是读不到东西的
f = open('123456', mode = 'w+', encoding = 'utf-8')
f.write('wefakjchakuchahfu') 写入时会覆盖掉以前的内容
f.seek(0,0) 把光标移到初始位置
s = f.read(10) 从初始位置读10个字符
print(s)
f.flush()
f.close()
a+追加读模式, 先添加后读:
如果一开始就读取, 和w+一样, 是读不到东西的
f = open('123456', mode = 'a+', encoding = 'utf-8')
f.write('abcde12345') 在最后添加字符串abcde12345
print(f.read()) 这时光标在文件的最后, 读取时, 读取不出内容
f.seek(0) 把光标移到第一个位置
print(f.read()) 这时可以读取出文档的全部内容
f.flush()
f.close()
四. 光标相关操作
f.seek(3) 光标向右移动3个字节, 在utf-8的编码文件中, 是一个中文字符的长度
print(f.tell()) 显示光标现在的在编码的字节文件的位置, 在f.read(1)后, 如果是读取了一个中文字符, f.tell()会输出3
f.seek(偏移量, 位置) 参数只有一个时, 表示从开始位置向右移动参数个字节. 位置为0时, 是开头, 1是现在的位置, 2是末尾
f.truncate(15) 截断, 从头截断到参数位置
f.truncate() 截断, 从从截断到光标位置
五. os模块
import os 引入os模块
with open('123456', mode = 'r', encoding = 'utf-8') as f1, \ 用\换一行继续写, 方便看
open('123456_副本', mode = 'w', encoding = 'utf-8') as f2: 用with就不需要用.close()了
for line in f1:
f2.write(line+"a1b2c3d4") 把f1的每一行字符串都写到f2里, 再添加一个字符串
os.remove('123456') 删除123456文件
os.rename('123456_副本', '123456') 把文件重命名为123456, 对文件进行更改