查IP地址:终端(功能键+R)+cmd+ipconfig
一,文件操作基本流程。
1. 打开文件,得到文件句柄并赋值给一个变量。
2. 通过句柄对文件进行操作
3. 关闭文件
参数:1,文件路径。
2,编码方式。encode。
3,执行动作(打开方式):只读,只写,追加,读写,写读....
f:变量,f_obj,file,f_handler,...文件句柄。
open windows的系统功能,windows默认编码方式:gbk,linux默认编码方式utf-8。f.close()
绝对路径:从根目录开始,一级一级查找知道找到文件。 D:护士老师主妇空姐联系方式.txt
相对路径:在同一个文件夹下,直接写文件名即可。
报错处理:
/U//UU
#'C:log.txt'
第一种:r'C:log.txt'
第二种:C:\log.txt
as.txt
f = open('D:护士老师主妇空姐联系方式.txt',encoding='utf-8',mode='r') content = f.read() print(content) f.close() #打不开的解决办法:查看格式,路径的引号,顺序。在路径前加r((r'D:护士老师主妇空姐联系方式),或者将\变为\\
二,文件编码
编码不一致时:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb7 in position 0: invalid start byte
文件以什么编码方式存储的,就以什么编码方式打开。利用之前学的编码转换
三,文件的打开模式
1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
五种方式:
1:全部读出来f.read()
f = open('log',encoding='utf-8')
content = f.read()
print(content,type(content))
f.close()
2:一行一行的读
f = open('log',encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
3:将原文件的每一行作为一哥列表的元素。
f = open('log',encoding='utf-8')
print(f.readlines())
f.close()
4:读取一部分read(n)。
在r模式下,read(n)按照字符去读取。
在rb模式下,read(n)按照字节去读取。
f = open('log',encoding='utf-8')
print(f.read(3))
f.close()
f = open('log',mode='rb')
content = f.read(4)
print(content)
f.close()
5:循环读取。
f = open('log',encoding='utf-8')
for i in f:
print(i.strip())
f.close()
这种方法,占用内存极少。不会把文件所有内容写入内存,而只是每次把一行的内容写入到内存。当下一次循环时,
上一次内存的内容被覆盖。所以整个程序 执行完成,内存只保存了一行的内容。
非文字类的文件时,用rb
rb,只读,以bytes类型读取。
f = open('D:护士老师主妇空姐联系方式.txt',mode='rb')
content = f.read()
print(content)
f.close()
r+ 先读,后追加 一定要先读后写
f = open('log',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('aaa')
f.close()
错误的 #先写后读,随着光标的移动,文件内容会被覆盖。
f = open('log',encoding='utf-8',mode='r+')
f.write('BBB')
content = f.read()
print(content)
f.close()
写:
w
没有文件,创建一个文件写入内容
f = open('log1',encoding='utf-8',mode='w')
f.write('儿科王金发;剪短发了肯定撒就废了;就')
f.close()
有文件,将原文件内容清空,在写入内容。
f = open('log1',encoding='utf-8',mode='w')
f.write('666')
f.close()
w+ 先写后读。
f = open('log',encoding='utf-8',mode='w+')
f.write('中国')
#print(f.tell()) # .tell()按字节去读光标位置
f.seek(3) #seek(3) 按照字节调整光标位置
print(f.read())
f.close()
truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,
因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。
f = open('log',encoding='utf-8',mode='a')
f.truncate(7) # 按字节对原文件截取
f.close()
五,文件的修改。
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果。
文件修改的过程:
1,将原文件读取到内存。
2,在内存中进行修改,形成新的内容。
3,将新的字符串写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。
import os #引入模块 os
with open('log',encoding='utf-8') as f1,
open('log.bak',encoding='utf-8',mode='w') as f2:
content = f1.read()
new_content = content.replace('alex','SB')
f2.write(new_content)
os.remove('log') #删除旧文件
os.rename('log.bak','log') #重命名新文件