Python —— 文件读写

文件读写:

一,读取文件

三个步骤:打开文件 - 读取文件 - 关闭文件

file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8') 
#r 表示以读的形式读取文件
#w 表示以写的形式读取文件
# a 就是append 追加
filecontent = file1.read()            
print(filecontent)
file1.close()

在这里插入图片描述

为什么要关闭文件?

  1. 计算机能够打开的文件数量是有限的,open()过多,而不close()的话,就不能再继续打开了。

  2. 能保证写入的内容已经在文件里保存好了。

    文件关闭之后就不能再对这个文件进行读写了。需要重新open()。

二,写入文件:

写入文件需要三个步骤:

打开文件——写文件——关闭文件

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'w',encoding='utf-8') 
file1.write('张无忌\n')     
file1.write('宋青书\n')

这里写入文件的时候需要写上"w",但是这样’w‘会暴力清空掉文件里面的原有数据,如果想要继续添加的数据,而不是完全覆盖的话就用’a’模式,表示append,追加的意思。

file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8') 
#以追加的方式打开文件abc.txt
file1.write('张无忌\n')     
#把字符串'张无忌'写入文件file1
file1.write('宋青书\n')     
#把字符串'宋青书'写入文件file1
file1.close()

这样的话就会追加,而不是覆盖了。

write()函数写入文本文件的也是字符串类型
在’w’,'a’模式下,如果打开的文件不存在则open()函数会自动创建一个。

f1 = open('./1.txt','a',encoding='utf-8') 
#以追加的方式打开一个文件,尽管并不存在这个文件,但这行代码已经创建了一个txt文件了
f1.write('难念的经')
#写入'难念的经'的字符串
f1.close()           
#关闭文件 
f2 = open('./1.txt','r',encoding='utf-8')
#以读的方式打开这个文件
content = f2.read()
#把读取到的内容放在变量content里面
print(content)
#打印变量content
f2.close()
#关闭文件

在这里插入图片描述

举例:

在这里插入图片描述

算学生的总分:
在这里插入图片描述

file = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file.readlines()
#因为想分开处理四个人的成绩,并不是直接都加起来,所以用readlines()函数,按行读取
file.close()

final_scores = [] #创建一个空列表

for i in file_lines:
    data =i.split()    #把列表里的数据切割,split()切割函数
    sum = 0  #用来存放每个人的总成绩                    
    for score in data[1:]:     #因为列表里的第一个(下标为0)都是名字,名字不能加
    	# 所以要从下标为1开始到最后  【1:】表示从第二个元素开始到结束
        sum = sum + int(score)     #因为里面的成绩都是字符串所以要转换成 int 型
    result = data[0]+str(sum)+'\n'    #data[0]表示名字
    final_scores.append(result)
#把成绩写入到新的文件里面
winner = open('/Users/Ted/Desktop/winner.txt','w',encoding='utf-8') 
winner.writelines(final_scores)
winner.close()

代码是以writelines()的方式写进去,为什么不能用write()?

因为final_scores是一个列表,而write()的参数必须是一个字符串,而writelines()可以是序列,所以我们使用writelines()。

with open ....... as : # as 后面写变量名字,这样的形式不需要单独写代码关闭文件

比如下面这个:

with open('photo1.png','rb') as file:
#注意这里是 rb
    data = file.read()
    with open('photo2.png','wb') as newfile:
    #这里是wb
        newfile.write(data)

上面哈利波特的举例:

file1=open(winner.txt,'r',encoding='utf-8')
file_lines=file1.readlines() #按行读取
file1.close()

dict_scores={}
list_scores=[]
final_scores=[]

# print(file_lines) 
# print(len('\n'))

# 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1]

for i in file_lines:  # i是字符串。    
	print(i)    
	name = i[:-4]  # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)    
	score = int(i[-4:-1])  # 取出成绩    
	print(name)    
	print(score)    
	dict_scores[score] = name  # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)    
	list_scores.append(score)


# print(list_scores)
list_scores.sort(reverse=True)  # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores) 

for i in list_scores:    
	result = dict_scores[i] + str(i) + '\n'    
	# print(result)    
	final_scores.append(result) 
	print(final_scores) # 最终结果 
	winner_new = open('winner_new.txt','w',encoding='utf-8') 
	winner_new.writelines(final_scores)winner_new.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值