python将列表写入文件读取失败_python 读取或写入文件

本文详细介绍了Python中文件的基本操作,包括文件的打开与关闭、读写方法及注意事项等内容,并提供了多种实用示例。

文件是数据存储的单位,文件中的数据以字节为单位进行顺序存储,汉字在GBK中占2个字节,在UTF-8中占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()#关闭文件

exceptOSError: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 exceptOSError: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 exceptOSError: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 inf:3 print(line) #打印每一行的数据

标准输入输出文件

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

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

1 importsys2 whileTrue: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 importsys2 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 importsys2 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 importsys2 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 exceptOSError: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 exceptOSError: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 exceptOSError: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 importtime2

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

作用:

告诉解释执行器,此前文件的编码是什么?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值