首页 > 编程语言 >python学习——【第十五弹】

python学习——【第十五弹】

时间:2023-02-28 21:32:34浏览次数:62  
标签:文件 打开 字节 python 学习 file 第十五 close txt

前言

上一篇文章​​ python学习——【第十四弹】 ​​​中学习了python中的包与内置模块,这篇文章接着学习python中的文件读写。

编码方式

在学习文件读写之前,我们先了解下python当中的编码方式:

python学习——【第十五弹】_编码

  • 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。
  • 字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。
  • 一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。


  • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
  • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
  • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
  • 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
  • UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
  • UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

python的解释器使用的Unicode(内存),python文件(.py)在磁盘上使用的是UTF-8(外存)。

python3中默认使用的是UTF-8的编码;

我们可以使用sys模块中的getdefaultencoding()获取默认的编码格式

import sys
print(sys.getdefaultencoding())
# utf-8

在计算机内存中,统一使用的是Unicode编码,当需要保存在硬盘或者是需要传输的时候,就会转换为UTF-8编码:

当我们用记事本进行编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里;编辑完成后进行保存,会再将Unicode转换为UTF-8保存到文件中。


python学习——【第十五弹】_文件读写_02


我们看用python文件用记事本打开,然后另存时默认的编码类型:

python学习——【第十五弹】_文件读写_03

而记事本的保存的默认编码格式是ANSI,(准确说,并不存在哪种具体的编码方式叫做ANSI,它只是一个Windows操作系统上的别称而已。在中文简体Windows操作系统上,ANSI就是GBK),如果我们直接用python去新建一个txt文本文档的文件,由于编码格式的不兼容,因此会发生乱码

python学习——【第十五弹】_文件指针_04

python学习——【第十五弹】_文件指针_05

为了避免编码格式不兼容的问题,我们可以在代码中进行修改写入数据的编码格式为UTF-8

f = open("编码.txt", "w",encoding='UTF-8')#将输入数据的编码格式改为UTF-8
f.write("你好!世界!")
f.close()

python学习——【第十五弹】_python_06


想要对编码格式多加了解的伙伴,可以参考这篇文章:​​点击查看​​​。​

常见的文件打开模式

文件的类型:

       按照文件数据的组织形式,文件分为以下两个大类:

       文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开

       二进制文件: 把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,如图片文件(.png  .jpeg等)以及  .doc文档等。

常见的打开模式:

      r  以只读的模式打开文件,文件的指针将会放在文件的开头

      w   以只写的模式打开文件  如果文件不存在就创建,如果文件存在就覆盖文件的原有内容,文件指针在文件的开头

      a  追加的模式打开文件,如果文件不存在就创建,文件指针在文件开头;如果文件存在,则在文件末尾追加内容,文件指针在源文件末尾

      b 以二进制的方式打开文件  不能单独使用,需要与共它模式一起使用 如 rb(只读的方式打开二进制文件)或者wb(只写的方式打开二进制文件)

      + 以读写的方式打开文件,不能单独使用,需要和其他模式一起使用 比如 a+


需要注意的是:我们在进行对文件的读写操作时,代码最后要对文件进行close()关闭操作close()操作把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源。

r 只读

以只读的模式打开该文件

file_r=open('a.txt','r')
print(file_r.read())#读取文件内容
file_r.close() #关闭文件 只要我们打开了文件,在代码结束时就要写上关闭文件的代码,以释放资源。

说到只读,这里有文件对象的几种常用方法,我们可以用只读的方式来查看各个方法的功能:

read([size])  从文件中读取size个字节或者是字符的内容的返回,如果省略[size]的话,就会从文件的开头一次性读取到文件的末尾;

readline()  从文本文件中读取第一行内容;

readlines()  把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表中返回;

seek(offest,[whence])  把文件指针移动到新的位置,offset表示相对于whence的位置;

tell()    返回文件指针的当前位置;

flush()  把缓冲区的内容写入到文件中,但是不关闭文件


我们先读取a.py中的全部内容:

python学习——【第十五弹】_文件读写_07

然后用读取文件对象的常用方法读取a.txt :

# read([size])   从文件中读取size个字节或者是字符的内容的返回,如果省略[size]的话,就会从文件的开头一次性读取到文件的末尾
file_r=open('a.txt','r')
print(file_r.read(5)) #返回5个字节
file_r.close()

print('------------------------\n')

# readline() 读取文本中的第一行内容
file_rl=open('a.txt')
print(file_rl.readline())
file_rl.close()

print('------------------------\n')

# readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表中返回
file_rls=open('a.txt','r')
print(file_rls.readlines())
file_rls.close()

python学习——【第十五弹】_编码_08

seek()

seek()的括号中输入字节数,文件的指针就会从文件开头往后移动几个字节

file_seek=open('a.txt','r')
file_seek.seek(2)
print((file_seek.read()))
file_seek.close() #llo world

a.txt:

python学习——【第十五弹】_文件指针_09

需要注意:如果我们需要读取的字节数必须是正确的字节数;比如在读取汉字时,如果是输入2,而

UTF-8的编码中一个汉字是3个字节,会导致程序报错。

tell()

返回文件指针的当前位置

file=open('a.txt','r')
file.seek(2)
print(file.read())
print(file.tell()) #返回指针当前所在的位置
file.close()

python学习——【第十五弹】_python_10


flush()

把缓冲区的内容写入到文件中,但是不关闭文件

file=open('b.txt','a')#采用追加的方式打开文件
file.write('hello')
file.flush() #把缓冲区的内容写入到文件中,但是不关闭文件
file.write('world')
file.close()

但是我们将flush()和close()区分开来,flush()不会关闭该文件,也就是说可以在flush()代码执行之后可以继续往文件里写入数据;但是close()执行后就不能再往文件中写入数据了,否则会报错。

python学习——【第十五弹】_python_11


w 只写

以只写的模式打开文件 ,如果文件不存在就创建,如果文件存在就覆盖文件的原有内容,文件指针在文件的开头:

python学习——【第十五弹】_编码_12

python学习——【第十五弹】_编码_13

只读的模式打开a.txt,我们发现a.txt文件中的原有内容被覆盖。

这里我们用到了文件对象的写入方法 : write(str)  将字符串str内容写入文件

还有一种常用的文件对象的写入方法:

writelines(s_list)  将字符串列表s_list写入文本文件,并且不添加换行符

s_lis1=['hello','world','hello','python']
file_wl=open('a.txt','w')
file_wl.writelines(s_lis1)
file_wl.close()

python学习——【第十五弹】_编码_14

使用该方法需要注意的是写入的必须是字符串列表,如果不是字符串列表会报类型错误

python学习——【第十五弹】_编码_15

a 以追加的模式打开文件

追加的模式打开文件,如果文件不存在就创建,文件指针在文件开头;如果文件存在,则在文件末尾追加内容,文件指针在源文件末尾。

file_a=open('a.txt',"a")
file_a.write('python') #写入'python'
file_a.close()

python学习——【第十五弹】_文件指针_16

python学习——【第十五弹】_编码_17

b 打开二进制的文件

二进制文件: 把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,如图片文件(.png  .jpeg等)以及 .doc文档等。

b 不能单独使用,需要与共它模式一起使用: 如rb或者wb

# 打开读取源文件
src_file=open('befor.png','rb')
# 打开写入目标文件
target_file=open('after.png','wb')
# 将从源文件中读取的文件写入目标文件
target_file.write(src_file.read())
# 将目标文件和源文件关闭
target_file.close()
src_file.close()

python学习——【第十五弹】_文件指针_18

每篇一语

不要在夕阳西下时幻想,要在旭日东升时努力。

如有不足,感谢指正!


标签:文件,打开,字节,python,学习,file,第十五,close,txt
From: https://blog.51cto.com/u_15928170/6091832

相关文章

  • APP学习3
    1.常见控件Button控件 继承自TextView控件,既可以显示文本,又可以显示图片,同时也允许用户通过点击来执行操作,点击效果。onClick属性:先在layout文件中指定onClick属性方......
  • TweenMax学习笔记整理
    因为要做一个案例,里面用到了很多动画,TweenMax真的是一个很强大的动画库,所以就学了一点里面的方法,现在整理出来官网​​:https://greensock.com/tweenmax​​注意:这个动画库是......
  • JAVAWEB学习-session-用session实现获取用户姓名
    继续学习session的有关知识,实现获取用户姓名session的作用是可以实现不同的页面保存共享同一个数据,在许多方面十分有用我们实现一个获取用户姓名的功能就用之前增删改......
  • C语言浮点类型的简单学习
    在C语言中,printf输出inf表示超过范围的浮点数:±∞(inf,-inf)printf输出nan表示不存在的浮点数注意:带小数点的字面量是double而不是floatfloat需要用f或F后缀来表明身份......
  • SSM框架-MyBatis学习日记6
    多对一的处理多对一的理解:多个学生对应一个老师如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师!数据库设计CREATE TABLE `teacher`(`id` INT(10)......
  • Python学习笔记
    python()表示元祖,元祖是一种不可变序列创建如:tuple=(1,2,3)取数据tuple[0]......tuple[0,2].....tuple[1,2]......修改元祖:元祖是不可修改的删除元祖de......
  • Flask学习笔记
    所有路由搜索都是自上而下搜索的注意:返回值为元组数据时,不能以以下形式返回:return('a','b','c')必须要以下面的形式返回: return'内容',*响应码return'11111',200......
  • Python第二天
    反斜线\\、单引号\'、双引号\"单引号、双引号定义一个字符串没有区别,三引号可以换行可以用作多行注释8bit(位)=1byte(字节)1024byte=1kbstr表示字符串(只要是双单引号里的都叫......
  • JAVAWEB学习-session-用session实现禁止用户非法访问页面
    今天学习了JAVAWEB中session的有关知识,能够实现禁止用户非法访问页面.session可以理解为一个表,每条数据有两个属性,String和Object,即名称和内容session的作用是可以实......
  • 原根 学习笔记
    阶假设\(\gcd(a,p)=1\),如果\(a^x\equiv1\pmodp\),那么最小的\(x\)称之为\(a\)在模\(p\)意义下的阶,记作\(\delta_p(a)\)。在抽象代数中,这里的“阶”就是模\(p......