【Python学习笔记】File IO

一、作用

  • 持久化存储
  • 分析处理日志

1.操作流程

  • 创建文件对象/打开文件
    • open(file, mode='r')
  • 读写内容
  • 关闭文件

2.创建文件对象

  • open(file, mode='r')
    • 读取模式:
      • r 字符串
      • rb Bytes
    • 写入模式
      • r+ 可读可写
    • 追加模式
      • a
    • 创建文件
      • w创建文件
      • wb Bytes

二、读取文件内容

1.read(n)

  • 默认读取文件所有内容
  • 按字符进行读取
file_name = r"E:\Python课程\venv\fileIO\file.txt"
fobj = open(file_name, mode="r")
data_01 = fobj.read()
print(data_01)
fobj.close()

666666666	#读取文件内容
dhahdjajh

指定读取行

file_name = r"E:\Python课程\venv\fileIO\file.txt"
fobj = open(file_name, mode="r")
data_01 = fobj.read(4)
print(data_01)
data_02 = fobj.read(2)
print(data_02)
fobj.close()

6666
66

2.遍历文件

file_name = r"E:\Python课程\venv\fileIO\file.txt"
fobj = open(file_name, mode="r")
for line in fobj:
    print("---> %s" % line)
fobj.close()

---> 666666666

---> dhahdjajh

三、写入模式

一般用于创建新文件

fobj = open(file_name, mode="a")

fobj.write("shell\n")
fobj.write("python\n")

fobj.seek(0, 0)
fobj.write("Golang")

fobj.close()

四、读写模式

file_name = r"E:\Python课程\venv\fileIO\file.txt"
fobj = open(file_name, mode="r+")
data_01 = fobj.read(3)
print(data_01)
# 覆盖后续内容
fobj.seek(2,0)
fobj.write("Window")
fobj.close()

66Window

五、追加模式

file_name = r"E:\Python课程\venv\fileIO\file.txt"
fobj = open(file_name, mode="a")
fobj.write("shell\n")
fobj.write("python\n")
fobj.seek(0, 0)
fobj.write("Golang")
fobj.close()

Golangshell
python
Golang

六、创建文件对象另外一种写法

该操作会自动关闭打开的文件

with open(file, mode="r") as 文件对象:
       文件内容操作
       文件内容操作

例子:统计网站访问日志

file = r"E:\Python课程\venv\fileIO\www.wangshengjj.work.log"

clinetip = {}
clientip_list = []
with open(file, mode="r") as fobj:
    for i in fobj:
        clientip = i.split()[0]
        clientip_list.append(clientip)

for i in set(clientip_list):
    print("IP地址:%s 访问次数:%s" % (i,clientip_list.count(i)))
    
IP地址:116.179.37.47 访问次数:15
IP地址:60.188.9.104 访问次数:2
IP地址:114.119.145.151 访问次数:1
IP地址:60.188.9.93 访问次数:1
IP地址:113.132.27.70 访问次数:1
IP地址:162.158.170.206 访问次数:1
IP地址:60.188.10.22 访问次数:1
IP地址:100.26.127.17 访问次数:5
IP地址:39.173.105.197 访问次数:6
IP地址:172.71.254.205 访问次数:2
IP地址:101.67.29.177 访问次数:2

七、移动光标位置

  • 文件需要以rb模式打开
  • seek(offset, whence)
    • offset偏移量
      • 正数 光标向后移动
      • 负数 光标向前移动
    • whence
      • 0 先将光标移动到文件开始处
      • 1 保持光标当前位置不动
      • 2 先将光标移动到文件末尾处
file_name = r"D:\project0805\files\test01.txt"

fobj = open(file_name, mode="rb")

data_01 = fobj.read()
print(data_01)

print("光标位置: %s" % fobj.tell())

# 向前移动3个字符
fobj.seek(-3,2)
print("光标位置: %s" % fobj.tell())
data_02 = fobj.read()
print(data_02)

# 将光标移动文件开始处的后2个字符
fobj.seek(2,0)
print("光标位置: %s" % fobj.tell())
data_03 = fobj.read(3)
print(data_03)


fobj.close()