两行代码读取文件内容
代码
f=data = open("wait_for_me.txt",encoding="utf-8").read()
print(data)
我的文件夹情况
我的TXT文件内容
西蒙诺夫《等着我吧》
等着我吧
我会回来的。
只是要你苦苦地等待,
等到那愁煞人的阴雨
勾起你的忧伤满怀,
等到那大雪纷飞,
等到那酷暑难捱
等到别人不再把亲人盼望,
往昔的一切,一古脑儿抛开。
等到那遥远的他乡
不再有家书传来,
等到一起等待的人
心灰意懒都已倦怠。
等着我吧
我会回来的,
不要祝福那些人平安:
他们口口声声地说
算了吧,等下去也是枉然!
纵然爱子和慈母认为
我已不在人间
纵然朋友们等得厌倦,
在炉火旁围坐,
啜饮苦酒,把亡魂追荐……
你可要等下去啊!千万
不要同他们一起,
忙着举起酒盏。
等着我吧
我会回来的:
死神一次次被我挫败!
就让那不曾等待我的人
说我侥幸感到意外!
那没有等下去的人不会理解
亏了你的苦苦等待,
在炮火连天的战场上,
从死神手中,是你把我拯救出来。
我是怎样在死里逃生的,
只有你和我两个人明白
只因为你同别人不一样,
你善于苦苦地等待。
运行结果
易错点
错误代码
错误提示
翻译:UnicodeDecodeError:'gbk'编解码器在20位不能解码字节0x80:非法多字节序列
注意
(汉字)如果要用utf-8打开文件,则需要写入: 打开(文件名'r',编码'UTF-8') 如果要用GBK打开文件,则需要执行以下操作: 打开(文件名“rb”)
后者演示
对比
英文可
helllo文件内容
hello xiyu!
come on!
wait you!
文件对象的访问模式
open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。
模式和缓冲参数都是可选的,默认为只读模式打开文件。使用with即使发生错误可以关闭文件,下面列出文件对象的访问的模式:
文件模式 操作
r 以只读方式打开
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开 (必要时清空)
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
x 如果文件存在报错,不存在则创建
***加b模式打开,不可以在指定encoding,切写入时也需要转换为字节写入文件
下面是一些打开文件的例子:
f = open('/etc/motd') # 以读方式打开
f = open('test', 'w') # 以写方式打开
f = open('data', 'r+') # 以读写方式打开
f = open('io.sys', 'rb') # 以二进制读模式打开
文件方法可以分为四类: 输入, 输出, 文件内移动, 以及杂项操作.
输入
read() 方法用来直接读取字节到字符串中, 最多读取给定数目个字节. 如果没有给定 size参数(默认值为 -1)或者 size 值为负, 文件将被读取直至末尾.
举例
读取5个字符
代码
f = open("hello.txt",'r+')
data = f.read(5)
f.close() #关闭文件
print(data) #打印文件
结果
readline()只读取第一行,再读取剩余的
readline() 方法读取打开文件的一行(读取下个行结束符之前的所有字节). 然后整行,包括行结束符,作为字符串返回. 和 read() 相同, 它也有一个可选的 size 参数, 默认为 -1, 代表读至行结束符. 如果提供了该参数, 那么在超过 size 个字节后会返回不完整的行.
代码
f = open("wait_for_me.txt",encoding="utf-8") #打开文件
# 读一行
first_line = f.readline()
print('first line:',first_line)
print('我是分隔线'.center(50,'-'))
# 读取剩下的所有内容,文件大时不要用
data = f.read()
print(data) #打印文件
结果
readlines()
readlines() 方法并不像其它两个输入方法一样返回一个字符串. 它会读取所有(剩余的)行然后把它们作为一个字符串列表返回. 它的可选参数 sizhint 代表返回的最大字节大小. 如果它大于 0 , 那么返回的所有行应该大约有 sizhint 字节(可能稍微大于这个数字, 因为需要凑齐缓冲区大小).
代码
f = open("hello.txt",'r+')
data = f.readlines()
f.close() #关闭文件
print(data) #打印文件
结果
其余尝试
输出
write()
write() 内建方法功能与 read() 和 readline() 相反. 它把含有文本数据或二进制数据块的字符串写入到文件中去.
代码
f = open("hello.txt",'r+')
f.write('shanghai!\n')
for i in f:
print(i)
f.close() #关闭文件
print('我是分隔线'.center(50,'-'))
data = open("hello.txt").read()
print(data)
结果
关闭
close()
close()关闭文件来结束对它的访问. Python 垃圾收集机制也会在文件对象的引用计数降至零的时候自动关闭文件. 这在文件只有一个引用时发生, 例如 f = open(...), 然后 f 在原文件显式地关闭前被赋了另一个文件对象. 良好的编程习惯要求在重新赋另个文件对象前关闭这个文件. 如果你不显式地关闭文件, 那么你可能丢失输出缓冲区的数据.