python 读取或写入文件

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。python 读取或写入文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

  文件是数据存储的单位,文件中的数据以字节为单位进行顺序存储,汉字在GBK中占2个字节,在UTF-8中占3个字节

  文件的操作流程

  1. 打开文件
  2. 读/写文件
  3. 关闭文件

注意:任何操作系统,一个应用程序同时打开文件的数量有最大数限制的,所以要记得关闭文件

读取文件

f = open(file='mynote.txt', mode='r*', encoding=None)

参数

  • file:文件名或(相对/绝对)文件路径
  • mode“r”:以只读方式打开文件(默认)
    • “t”:文本文件模式打开(默认)
    • “b”:二进制模式打开
  • encoding:python默认是ASCII编码,显示中文时会做一个ASCII到系统默认编码的转换,到时候会出错,所以一定要规定编码格式

返回:文件流对象

注意:如果打开文件失败,则会触发OSError错误

try:
    f = open("./abc.txt")
    print("文件打开成功!")
    f.close()  # 关闭文件
except OSError:
    print("打开文件失败!")

python   文件读写的类型有两种

  文本文件(text file)     操作模式:’t’

  二进制文件(binary file)  操作模式:“b”

文本文件操作:

把文件的字节码自动转换为字符串,换行符会自动转换成’\n’,默认文件中存储的都为字节数据,以行为单位进行分隔,在python内部统一用’\n’作为换行进行分隔

  对文本文件读写需要用字符串(str)进行数据读取和写入

各种操作系统的换行

  Linux换行符 : ‘\n’
  Window换行符 : ‘\r\n’
  旧的Macintosh换行符: ‘\r’
  新的Mac Os 换行符 : ‘\n’

f.read()  

从文件读取指定的字节流数,如果未给定或者为负则读取所有

# runoob.txt文件的内容是
# 1:www.runoob.com
# 2:www.runoob.com
# 3:www.runoob.com
# 4:www.runoob.com
# 5:www.runoob.com


fo = open("runoob.txt", "rw+")    # 打开文件
print "文件名为: ", fo.name

line = fo.read(10)
print "读取的字符串: %s" % (line)

fo.close()    # 关闭文件

# 文件名为:  runoob.txt
# 读取的字符串: 1:www.runo

f.read()

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()

1 文件打开成功!2 读取成功,文字是:hello3 4 第二行数据是:world5 6 文件内已经没有数据可读取!

结果

f.readlines()  

以列表形式返回所有行内容,换行符也会读到

1 try:
2     f = open('../exercise/info.txt')
3     L = f.readlines()  # 返回所有行文字的列表
4     print(L)
5     f.close()
6 except OSError:
7     print("打开文件文件")

f.readlines()

1 ['张三 23 45\n', '历史 23 54']

结果

关闭文件

  f.close()  关闭,释放系统资源

f = open(“haha.txt”,”w”)

 f.write(“hello”)

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

f = open('mynote.txt', 'w')
f.write('hello')
f.close()

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

1 f = open('mynote.txt', 'a')
2 f.write('world')
3 f.close()

‘a’模式打开并写入

 F.writelines(lines)  将列表中的内容写入文件,内容要是字符串

1 f = open('mynote.txt', 'w')
2 L = ['我是第一行\n', '我是第二行']
3 f.writelines(L)
4 f.close()

f.writelines(L)

文件流对象是可迭代对象,迭代过程中将以换行符’\n’作为分隔符,实例:

1 f = open('num.txt')
2 for line in f:
3     print(line)  # 打印每一行的数据

标准输入输出文件

  模块名 :sys     sys.stdin:标准输入文件

sys.stdin.readline()  从键盘读入一行信息,回车结束

1 import sys
2 while True:
3     s = sys.stdin.readline()
4     if len(s) < 2:
5         break
6     print("刚刚读入",len(s),"字符")
7     print("s",s)

sys.stdin.readline()

1 dasd2 刚刚读入 5 字符3 s dasd

结果

sys.stdin.read()    从键盘读入多行信息,ctrl + d 输入文件结束符

1 import sys
2 s = sys.stdin.read()
3 print(s)
4 print("程序结束")

sys.stdin.read()

1 dsda2 fds3 ^D4 dsda5 fds6 7 8 程序结束

结果

sys.stdout.wirte() (向屏幕终端打印信息) print就是默认sys.stdout.write

1 import sys
2 sys.stdout.write("hello")
3 sys.stdout.write(" ")
4 sys.stdout.write("world\n")

sys.stdout.write(“****”)

1 hello world

结果

1 f = open("stdout.txt",'w')2 print(1,2,3,4,sep='#',file = f)

print(1,2,3,4,sep=’#’,file = f)

1 1#2#3#4

结果

sys.stderr.write() (向屏幕终端打印错误输出)

1 import sys
2 sys.stdout.write("我是标准输出\n")
3 sys.stderr.write("我是错误输出\n")

sys.stderr.write(“*”)

我是错误输出我是标准输出

结果

    标准文件不需要打开和关闭就可以使用

二进制文件操作:

 二进制文件操作模式字符:’b’

默认文件中存储的是以字节为单位的数据,二进制文件操作需要用字节串进行读写

f.read() / f.readline() / f.readlines() 返回类型

  对于文本文件,f.read()等函数返回为字符串(str)

  对于二进制文件,f.read()等函数返回为字节串(bytes)

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

 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)    #b'hello'
 6     b += f.read(2)
 7     print(b)    #b'hello\xe4\xb8'
 8     b += f.read()  # 不加实参读取全部字节,直至文件尾
 9     print(b)    #b'hello\xe4\xb8\xad\xe6\x96\x87'
10     print('读取的内容转为文字后为:', b.decode('utf-8'))
11     f.close()   #读取的内容转为文字后为: hello中文
12 except OSError:
13     print("打开文件失败!")

f = open(‘infos.txt’, ‘rb’)

F.write()对于二进制文件需要用字节串进行操作

 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(offset[,whence])方法来移动文件的读写指针位置  字节单位

  • offset — 开始的偏移量

      • 大于0的数表示向文件尾开始移动偏移的字节数

      • 小于0的数表示向文件头开始移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;

      0代表从文件开头开始算起,

      1代表从当前位置开始算起,

      2代表从文件末尾算起。

 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)

清空缓冲区

 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()

 汉字在UTF-8中占3个字节,在GBK中占两个字节

编码注释:
  在python源文件的第一行或第二行写入如下内容:
    # -*- coding:gbk -*-
    # 设置源文件编码格式为gbk
  或
    # -*- coding:utf-8 -*-
    # 设置源文件编码格式为utf-8
  作用:
    告诉解释执行器,此前文件的编码是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/159347.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!