python 文件

文件

汉字在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("打开文件失败!")
打开文件错误会触发OSError错误

文件关闭方法

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.readline

 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.readlines

 f.write("hello")

如果写入的文件有内容,会清空内容再写入,如果没有.txt文件,会先创建再写入

1 f = open('mynote.txt', 'w')
2 f.write('hello')
3 f.close()
f.write("obj")

 以'a'模式打开文件并写入文件  追加

1 f = open('mynote.txt', 'a')
2 f.write('world')
3 f.close()
'a'模式打开并写入

 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("程序退出")
sys.stdin.readline()

 从键盘写入信息

1 import sys
2 
3 sys.stdout.write("hello world\n")
4 
5 sys.stderr.write("我的出现是个错误!\n")
sys.stdout.write("内容")

 清空缓冲区

 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()
f.flush()

 以二进制方式读取文件内容

 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("打开文件失败!")
f = open('abc.txt', 'rb')

   以二进制方式读取文件内容,然后再将其转换为字符串

 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("打开文件失败!")
View Code

二进制模式进行写操作

 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 = open("data.bin", 'wb')

用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.tell()

用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()
F.seek(offset, whence=0)

猜你喜欢

转载自www.cnblogs.com/LXP-Never/p/9343866.html