赞
踩
一、write()方法
将字符串写入文件,返回的是写入的字符长度。
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字
|。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
write()方法不会在字符串的结尾添加换行符(’\n’):
如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
语法:
fileObject.write( [ string ])
参数
string – 要写入到已打开文件的内容。
返回值
返回的是写入的字符长度。
例子:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
# 关闭打开的文件
fo.close()
上述方法会创建foo.txt文件,并将收到的内容写入该文件,并最终关闭文件。如果你打开这个文件,将看到以下内容:
$ cat foo.txt
www.runoob.com!
Very good site!
二、writelines() 方法:
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
语法
fileObject.writelines( [ str ])
参数
str – 要写入文件的字符串序列。
返回值
该方法没有返回值。
实例
以下实例演示了 writelines() 方法的使用:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 打开文件 fo = open("test.txt", "w") print ("文件名为: ", fo.name) seq = ["菜鸟教程 1\n", "菜鸟教程 2"] fo.writelines( seq ) # 关闭文件 fo.close() 以上实例输出结果为: 文件名为: test.txt 查看文件内容: $ cat test.txt 菜鸟教程 1 菜鸟教程 2
三、read()方法
从文件读取指定的字节数,如果未给定或为负则读取所有。
Python字符串可以是二进制数据,而不是仅仅是文字
。语法:
fileObject.read([size])
参数
size – 从文件中读取的字节数。
返回值
返回从字符串中读取的字节。
实例
以下实例演示了 read() 方法的使用:
文件 runoob.txt 的内容如下:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
循环读取文件的内容:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 打开文件 fo = open("runoob.txt", "rw+") print("文件名为: ", fo.name) line = fo.read(10) print ("读取的字符串: %s" % (line)) # 关闭文件 fo.close() 以上实例输出结果为: 文件名为: runoob.txt 读取的字符串: 1:www.runo
四、 readline()方法:
读取整行,包括 "\n" 字符。
语法
fileObject.readline([size])
参数
size – 从文件中读取的字节数。
返回值
返回从字符串中读取的字节。
实例
以下实例演示了 readline() 方法的使用:
文件 runoob.txt 的内容如下:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
循环读取文件的内容:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开文件
fo = open("runoob.txt", "rw+")
print ("文件名为: ", fo.name)
line = fo.readline()
print ("读取第一行 %s" % (line))
line = fo.readline(5)
print ("读取的字符串为: %s" % (line))
# 关闭文件
fo.close()
以上实例输出结果为:
文件名为: runoob.txt
读取第一行 1:www.runoob.com
读取的字符串为: 2:www
五、readlines()函数
所有行
并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。语法
fileObject.readlines([sizeint])
参数
无
返回值
返回列表,包含所有的行。
实例
以下实例演示了 readline() 方法的使用:
文件 runoob.txt 的内容如下:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
循环读取文件的内容:
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开文件
with open("runoob.txt", "r") as fo:
print ("文件名为: ", fo.name)
for line in fo.readlines(): #依次读取每行
line = line.strip() #去掉每行头尾空白
print ("读取的数据为: %s" % (line))
以上实例输出结果为:
文件名为: runoob.txt
读取的数据为: 1:www.runoob.com
读取的数据为: 2:www.runoob.com
读取的数据为: 3:www.runoob.com
读取的数据为: 4:www.runoob.com
读取的数据为: 5:www.runoob.com
六、flush()函数
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
语法
fileObject.flush()
参数
无
返回值
该方法没有返回值。
实例
#!/usr/bin/python # -*- coding: UTF-8 -*- # 打开文件 fo = open("runoob.txt", "wb") print ("文件名为: ", fo.name) # 刷新缓冲区 fo.flush() # 关闭文件 fo.close() 以上实例输出结果为: 文件名为: runoob.txt
进度条实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys,time
for i in range(30): #进度条类型
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.2)
七、常见错误
第一种场景:
在 write 内容后,直接 read 文件输出会为空,是因为指针已经在内容末尾
。
两种解决方式:
其一,先 close 文件,open 后再读取,
其二,可以设置指针回到文件最初后再 read
# -*- coding: UTF-8 -*-
import os;
document = open("testfile.txt", "w+");
print( "文件名: ", document.name);
document.write("这是我创建的第一个测试文件!\nwelcome!");
print(document.tell()); #输出当前指针位置
document.seek(os.SEEK_SET); #设置指针回到文件最初
context = document.read(); #读文件
print(context);
document.close();
第二种场景:
Python 在 Windows 环境下(在 linux 环境下不存在此问题),在 write 后,直接 read, 会出现乱码问题
。如下:
fo = open("foo.txt", "w+")
fo.write('www.runoob.com')
print fo.read()
解决方案:
要想在write()后执行read()方法:
需要先执行flush()方法或指定一个文件读取为止(即close())
。
改进以后的代码如下:
fo = open("foo.txt", "w+")
fo.write('www.runoob.com')
fo.flush()
fo.seek(0) #指定指针为止为文件开头
print (fo.read())
读取乱码问题完美解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。