什么是编码?
编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。编码有许多种,我们最常用的是UTF-8编码。
文件的读取
内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。
文件操作主要有以下几种:打开、关闭、读、写等
**打开文件:**在python中,使用open函数,可以打开一个已经存在的文件。文件不存在就会报错
语法:open(name,mode,encoding)
**name:**是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。mode:设置打开文件的模式(访问模式):只读、写入、追加等。encoding:编码格式(推荐使用UTF-8)。注意:由于encoding的顺序不在第三位,所以不能使用位置参数,使用关键字参数直接指定。
f = open('D:\pycharm\python_study\python.txt', 'r', encoding='UTF-8')
读操作相关方法:
**read()方法:**num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。如果在程序中多次调用read函数,下一个read函数是从上一个read函数结尾处开始。
文件对象.read(num)
f = open('D:\pycharm\python_study\python.txt', 'r', encoding='UTF-8')``print(f'读取10个字节的内容{f.read(10)}')``print(f'读取10个字节的内容{f.read(10)}')
读取10个字节的内容Hello,pyth``读取10个字节的内容on world!你
readline()方法:只读取一行的内容,并且返回的是一个字符串。读取时会将换行符读入。
readlines()方法:readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。读取时会将换行符读入。
f = open('D:/pycharm/python_study/python.txt', 'r', encoding='UTF-8')``print(f'读取文件后类型为:{type(f)}')``line1 = f.readline() # 读取文件第一行,封装到字符串中``line2 = f.readline() # 读取文件第一行,封装到字符串中``print(f'读取文件第一行的内容为:{line1},类型为{type(line1)}')#读取时有一个换行符``print(f'读取文件第二行的内容为:{line2},类型为{type(line2)}')``f.close()
读取文件后类型为:<class '_io.TextIOWrapper'>``读取文件第一行的内容为:Hello,python world!,类型为<class 'str'>``读取文件第一行的内容为:你好,新世界!,类型为<class 'str'>
f = open('D:/pycharm/python_study/python.txt', 'r', encoding='UTF-8')lines = f.read``lines() # 读取文件所有行,封装到列表中``print(f'读取文件所有行的内容为:{lines},类型为{type(lines)}')``f.close()
读取文件所有行的内容为:['Hello,python world!\n', '你好,新世界!'],类型为<class 'list'>
for循环读取文件行
for line in open('python.txt','r',encoding='UTF-8'):` `print(line)
Hello,python world!#print会自动换行并且会读取文本中的换行符。``你好,新世界!
关闭文件对象:f.close()
自动关闭文件对象:with open() as f:这种方法不需要使用close函数关闭文件,会自动关闭。
with open('python.txt', 'r', encoding='UTF-8') as f:` `for line in f:` `print(line, end='')
Hello,python world!``你好,新世界!
案例:单词计数
with open('python.txt', 'r', encoding='UTF-8') as f:` `list = []` `for line in f: # 得到每一行字符串` `line1 = line.strip() # 去除字符串前后空白以及换行符` `line2 = line1.split(' ') # 分割后得到的是数组` `list.extend(line2) # 将数据全部添加到另一个数组中` `print(list) # 打印数组内容` `print(list.count('itheima'))
['itheima', 'itcast', 'python', 'itheima', 'python', 'itcast', 'beijing', 'shanghai', 'itheima', 'shenzhen', 'guangzhou', 'itheima', 'wuhan', 'hangzhou', 'itheima', 'zhengzhou', 'bigdata', 'itheima']``6
with open('python.txt', 'r', encoding='UTF-8') as f:` `content = f.read()` `print(content) # 打印字符串内容` `print(content.count('itheima'))
itheima itcast python``itheima python itcast``beijing shanghai itheima``shenzhen guangzhou` `itheima wuhan hangzhou` `itheima zhengzhou bigdata itheima``6
文件写入:f.write(“内容”),'w’模式如果文件不存在,会自动创建一个新文件,如果文件存在,会将内容清空。write()只是写入到缓冲区,并没有写入文件中,再使用,使用flush()函数****刷新一下即可,或者使用close()函数,它自带flush()函数的功能。因此要先将所有要写入的内容先写入到缓冲区flush()函数,否者下次写入会将内容清空。
f = open('test.txt', 'w', encoding='UTF-8')``f.write('你的名字') # 写入内容``f.flush() # 刷新内容到硬盘中``f.close() # 自带flush()功能
文件的追加:
打开文件时,设置为**'a**'即可,文件不存在时,会创建文件;文件存在时,会在最后,追加写入文本内容。
**案例:**将其中的测试那一行数据去除,其余的数据写入到另一个文件中。
f1 = open('bill_copy.txt', 'w', encoding='UTF-8') # "w"模式下每次写入会将原有数据清楚``with open('bill.txt', 'r', encoding='UTF-8') as f: # 这种会自动使用close文件` `for line in f:` `if '测试' in line:` `continue` `else:` `f1.write(line)``f1.close()
f1 = open('bill_copy.txt', 'w', encoding='UTF-8') # "w"模式下每次写入会将原有数据清楚``f2 = open('bill.txt', 'r', encoding='UTF-8')``for line in f2:` `line1 = line.strip()` `line2 = line1.split(',')` `if line2[4] == '测试':` `continue` `else:` `f1.write(line)``f1.close()``f2.close()