python基础语法(七)

文件读写


编码问题

平时最烦看到的就是乱码了

Python3当中,程序处理我们输入的字符串,是默认使用Unicode编码的,所以你什么语言都可以输入。

  • 数据在硬盘上存储,或者是在网络上传输时,用的是UTF-8,因为节省空间。但你不必操心如何转换UTF-8Unicode,当我们点击保存的时候,程序已经“默默地”帮我们做好了编码工作。
  • 一些中文的文件和中文网站,还在使用GBK,和GB2312

基于此,有时候面对不同编码的数据,我们要进行一些操作来实现转换。这里就涉及接下来要讲的【encode】(编码)和【decode】(解码)的用法。

相关函数的用法

 

语法如下

a = '秋水'

print(a.encode('utf-8'))

 

所谓的编码,其实本质就是把str(字符串)类型的数据,利用不同的编码表,转换成bytes(字节)类型的数据

我们再来区分下字符和字节两个概念。字符是人们使用的记号,一个抽象的符号,这些都是字符:'1', '中', 'a', '$', '¥' 

而字节则是计算机中存储数据的单元,一个8位的二进制数

编码结果中除了标志性的字母b,你还会在编码结果中看到许多\x

\x是分隔符,用来分隔一个字节和另一个字节

分隔符还挺常见的,我们在上网的时候,不是会有网址嘛?你经常会看到网址里面有好多的%,它们也是分隔符,替换了Python中的\x

读取文件

感觉上各个语言的读取方式都是相差不大,大概分为三步

  • 打开文件
  • 读取文件
  • 关闭文件

第一步,打开文件,语法如下

# open函数用来打开文件,有三个参数
#第一个参数是文件的绝对路径
#第二个参数是r,是read的简写,意思读取文件,以此方式打开的文件无写权限,只能看
#第三个参数,代码以utf-8编码的形式打开文件

file = open('C:/Windows/win.ini','r',encode('utf-8'))

打开文件之后就要进行文件的读取操作了,这个时候用到的函数是read函数,语法如下

file = open('C:/windows/win.ini','r',encode('utf-8'))


#读取打开的文件file,通过read函数
filecontent = file.read()

 接下来我们把文件打印出来,并关闭文件,使用close函数

file = open('C:/windows/win.ini','r',encode('utf-8'))
filecontent = file.read()

#打印文件,并关闭
print(filecontent)
file.close()

写文件

写文件,也同样是三步

  • 打开文件
  • 写入文件
  • 关闭文件 

代码格式如下

#w代表写入文件
file = open('C:/windows/test.txt','w',encode('utf-8'))

#write函数写文件
file.write('666666666')

#关闭文件
file.close()

这里要注意,w代表写入文件,会清空源文件内容,要想,保留原内容参数需要设置成a-->append(追加)具体用法参照下图 

小扩展

如果需要按行读取,这个时候就不能使用read函数了,需要使用readlines()函数

readlines() 会从txt文件取得一个列表,我们就可以使用for循环来遍历这个列表,然后处理列表中的数据

每一行的数据要想在分开可以使用split()函数,与之相对的就是join函数

小练习:

#test文件内容如下
#罗恩 23 35 44
#哈利 60 77 68 88 90
#赫敏 97 99 89 91 95 90
#马尔福 100 85 90


file1 = open('D:/test.txt','r',encoding='utf-8') 
file_lines = file1.readlines()
file1.close()

for i in file_lines:
    data =i.split()    
    sum = 0                    #先把总成绩设为0
    for score in data[1:]:     #遍历列表中第1个数据和之后的数据
        sum = sum + int(score) #然后依次加起来,但分数是字符串,所以要转换    
    result = data[0]+str(sum)  #结果就是学生姓名和总分
    print(result)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值