文件
汉字在GBK中占2个字节,在UTF-8中占3个字节
文件是数据存储的单位,文件中的数据以字节为单位进行顺序存储
文件的操作流程
1、打开文件
2、读写文件
3、关闭文件
任何操作系统,一个应用程序同时打开文件的数量有最大数限制的
文件的打开函数 open
open(file,mode = 'rt')
用于打开一个文件,返回此文件对应的文件流对象,如果打开失败,则会触发OSError错误
1 try: 2 f = open("./abc.txt") 3 print("文件打开成功!") 4 f.close() # 关闭文件 5 except OSError: 6 print("打开文件失败!")
文件关闭方法
F.close() 关闭,释放系统资源
python 文件读写的类型有两种
文本文件(text file)
二进制文件(binary file)
文本文件操作:默认文件中存储的都为字符数据,以行为单位进行分隔,在python内部统一用'\n'作为换行进行分隔
对文本文件读写需要用字符串(str)进行数据读取和写入
各种操作系统的换行
Linux换行符 : '\n'
Window换行符 : '\r\n'
旧的Macintosh换行符: '\r'
新的Mac Os 换行符 : '\n'
f.readline 返回一行内容
1 try: 2 f = open("abc.txt") 3 print("文件打开成功!") 4 s = f.readline() # 读取一行数据 5 if s != '': 6 print("读取成功,文字是:", s) 7 else: 8 print("文件内已经没有数据可读了") 9 10 s = f.readline() 11 print("第二行数据是:", s) 12 s = f.readline() 13 print("第三行数据是:", s) 14 s = f.readline() 15 if s == '': 16 print("文件内已经没有数据可读取!") 17 else: 18 print('第四行数据是', s) 19 20 f.close() 21 except OSError: 22 print("文件打开失败")
f.readlines 返回所有行文件列表
1 try: 2 f = open("abc.txt") 3 print("文件打开成功!") 4 s = f.readline() # 读取一行数据 5 if s != '': 6 print("读取成功,文字是:", s) 7 else: 8 print("文件内已经没有数据可读了") 9 10 s = f.readline() 11 print("第二行数据是:", s) 12 s = f.readline() 13 print("第三行数据是:", s) 14 s = f.readline() 15 if s == '': 16 print("文件内已经没有数据可读取!") 17 else: 18 print('第四行数据是', s) 19 20 f.close() 21 except OSError: 22 print("文件打开失败")
f.write("hello")
如果写入的文件有内容,会清空内容再写入,如果没有.txt文件,会先创建再写入
1 f = open('mynote.txt', 'w') 2 f.write('hello') 3 f.close()
以'a'模式打开文件并写入文件 追加
1 f = open('mynote.txt', 'a') 2 f.write('world') 3 f.close()
F.writelines(lines) 将字符串的列表或字符串的列表中的内容写入文件
f.writelines(L)
从键盘读取信息
1 import sys 2 3 s = sys.stdin.readline() 4 print('从键盘读取的第一行是', s) 5 6 s = sys.stdin.read() 7 print('read读取的信息是:', s) 8 9 print("程序退出")
从键盘写入信息
1 import sys 2 3 sys.stdout.write("hello world\n") 4 5 sys.stderr.write("我的出现是个错误!\n")
清空缓冲区
1 import time 2 3 f = open('infos.txt', 'w') 4 f.write('hello') 5 f.flush() # 强制清空缓冲区 6 7 # for i in range(10000): 8 # f.write('helloooooo') 9 # time.sleep(0.01) 10 11 print("程序开始睡觉...zzz") 12 time.sleep(15) 13 print("程序睡醒了,继续执行") 14 15 f.close()
以二进制方式读取文件内容
1 try: 2 f = open('abc.txt', 'rb') 3 # 读取数据,常用f.read读取 4 b = f.read(5) # <<== 5 代表5个字节(bytes) 5 print(b) #b'hello' 6 b = f.read(2) 7 print(b) #b'\xce\xd2' 8 b = f.read() # 不加实参读取全部字节,直至文件尾 9 print(b) #b'\xca\xc7\xb5\xda\xd2\xbb\xd0\xd0\r\n' 10 f.close() 11 except OSError: 12 print("打开文件失败!")
以二进制方式读取文件内容,然后再将其转换为字符串
1 try: 2 f = open('infos.txt', 'rb') 3 # 读取数据,常用f.read读取 4 b = f.read(5) # <<== 5 代表5个字节(bytes) 5 print(b) 6 b += f.read(2) 7 print(b) 8 b += f.read() # 不加实参读取全部字节,直至文件尾 9 print(b) 10 print('读取的内容转为文字后为:', b.decode('utf-8')) 11 f.close() 12 except OSError: 13 print("打开文件失败!")
二进制模式进行写操作
1 try: 2 f = open("data.bin", 'wb') 3 # 在此处需要以字节串为单位进行写操作 4 f.write(b'\xe4') # '中'字的编码: e4 b8 ad 5 f.write(b'\xb8') 6 f.write(b'\xad') 7 f.write(b'\n\x41\x42\x43') 8 f.close() 9 except OSError: 10 print("文件打开失败!")
用f.tell()方法获取文件当前的读写位置
1 f = open('data.txt', 'rb') 2 print("当前的读写位置是:", f.tell()) # 0 3 b = f.read(5) 4 print("当前的读写位置是:", f.tell()) # 5 5 b = f.read() # 读取全部内容 6 print("文件最后的位置是:", f.tell()) # 20 7 f.close()
用F.seek方法来移动文件的读写指针位置
1 f = open('data.txt', 'rb') 2 # 方法1 3 # f.seek(5, 0) # 相对于文件头向后移动5个字节 4 # 方法2 5 # f.seek(-15, 2) # 相对于文件尾向前移动15个字节 6 # 方法3 7 b = f.read(2) # 先读取2个字节 8 f.seek(3, 1) # 相对于当前位置向后移动3个字节 9 10 b = f.read(5) 11 print(b) # b'abcde' 12 13 f.close()