python中的IO编程

开通博客写的第一篇文章就是关于python的,今天这篇文章是关于IO编程操作的,IO的内容也不少,以后想到什么会继续补充。

目录

1、文件的使用

1.1、文件的类型

1.2 文件的打开和关闭

1.3文件的读写

1.3.1文件的读取方法:

1.3.2文件的写入方法

2、数据组织的维度

2.1、一维数据的处理

2.2、二维数据的处理

参考文献:


1、文件的使用

文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容。概念上来说,文件是数据的集合和抽象

1.1、文件的类型

文件包括文本文件和二进制文件两种类型

文本文件一般由单一特定编码的字符组成,如UTF-8。由于文本文件存在编码,所以它可以被看做是存储在磁盘上的长字符串,如txt格式的文本文件。

二进制文件直接由比特0和比特1组成,没有统一的字符编码,文件内部数据的组织格式与文件用途有关。二进制是信息按照非字符但有特定格式形成的文件,如png格式的图片文件、avi格式的视频文件。

二进制文件和文本文件的区别在于是否有统一的字符编码,二进制文件由于没有统一的字符编码,只能当作字节流,而不能看做是字符串。

1.2 文件的打开和关闭

Python中是通过open()函数打开一个文件的,并返回一个操作这个文件的变量:

<变量名> = open(<文件路径及文件名>,<打开模式>)

f = open('D:/text.txt','rt')    

open()函数一般包含两个参数:文件名和打开模式。

打开模式                              含     义
           'r'只读模式,若文件不存在,返回异常FileNotFoundError
           'w'覆盖写模式,文件不存在则创建,存在则覆盖原文件
           'x'创建模式,文件不存在则创建,存在返回异常FileExistsError
           'a'追加模式,文件不存在则创建,存在在原文件后追加内容
           'b'二进制文件模式,读入字节流
           't'文本文件模式,读入字符串
           '+'与/r/w/x/a一起使用,在原功能上增加同时读写功能

'r'、'w'、'x'、'a'不能同时使用,但是可以和'b'、't'、'+'组合使用。

文件使用结束后,用close()方法关闭,以释放操作系统中的资源。

由于进行I/O操作时可能会IOError,这时候就close()方法就无法执行了,为了避免这种情况发生通常用try...finally语句

try:
    f = open('D:/test.txt','rt')
    print(f.read())
finally:
    if f:
        f.close()

python中的with语句可以更简洁的达到这种效果:

with open('D:/test.txt','r') as f:
    print(f.read())

代码变得更简洁了,而且不用调用close()方法了。比较推荐使用这种方式

当然,open()函数还可以有encoding参数,比如通过encoding = 'gbk'将文件打开为‘gbk’编码形式。

1.3文件的读写

上面通过open()方法只能创建一个文件对象f,但是我们无法获取文件中的内容,也无法向文件中写入内容。实际上f对象是有读写方法的,接下来从读文件和写文件进行说明。

1.3.1文件的读取方法:

            方法                                                    含义
f.read(size = -1 )读取整个文件的内容。  size设定读入的长度(下同)
f.readline(size = -1)从文件中读入一行内容
f.readlines(size = -1)从文件中读入所有行,以每行为元素形成一个列表
     f.seek(offset)改变当前文件操作指针的位置,offset值:0为文件开头;2为文件结尾

我在test.txt文件中写了《悯农》这首诗

我们来看看读操作,f.read()是最常用的一次性读入文件的格式

                                                   

f.readlines()也是一次性读入文件的函数,其结果是一个列表,每个元素是文件的一行

                                                

文件打开后,对文件的读写有一个读取指针,当从文件中读入内容后,读取指针将向前进,再次读取读取的内容将从指针的新位置开始。

                                        

可以看到,进行了一次读操作后,再进行读操作,返回值为空。在上面的表中,有个seek()函数,我们可以使用f.seek(0)把读取指针移动到文件的开头

                                      

f.readline()是一行行的读取:

                                                     

我们还可以使用for遍历循环来对文本每一行进行打印或者其他处理。逐行遍历文件仅针对文本方式,二进制方式打开没有行的概念。

                                                   

文件的读取有三种方法,那么怎么进行选择呢。如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。

1.3.2文件的写入方法

                                                  

           方法                               含义
      f.write(s)                向文件写入一个字符串
  f.writelines(lines)    将元素作为字符串的列表整体写入文件

文件的写入和读取是相似的,唯一的不同就是把open()中的打开模式换为‘w’或‘wb’来打开文本文件或者二进制文件。‘w’是覆盖写模式,所以把test.txt文件中的《悯农》改成《静夜思》可以这样操作

                                                

使用write时,需要显式的用'\n'对写入的文本进行分行。

如果想在《静夜思》基础上再写入《登鹳雀楼》,可以这么操作,将open()中的打开模式设置为追加模式

                                                 

f.writelines()直接将列表类型的各元素连接起来写入文件f,一行代表一个元素。

                                                 

将会在D/:路径下创建demo.txt文本文件。

一般文本文件和二进制文件会这样读取,用python做图像处理时,有专门的图像处理第三方库,里面包含一些图片读写的函数,把图片以矩阵的形式读入。

2、数据组织的维度

一组数据在被计算机处理前需要进行一定的组织,表明数据之间的基本关系和逻辑,进而形成数据的维度。根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据。

2.1、一维数据的处理

一维数据是最简单的数据组织类型,python中主要采用列表形式表示。其中用逗号分隔元素的格式为CSV格式(即逗号分隔值),它是一种通用的文件格式,一般采用.csv为扩展名。

将列表对象输出为CSV格式文件的方法如下:

ls = ['人生苦短','我用python','我爱中国']
f = open('D:/test.csv','w')
f.write(','.join(ls) + '\n')
f.close()

生成的test.csv文件可以用excel打开。

因为对文本文件进行I/O操作,得到的是字符串,所以对数据进行处理时,会用到一些字符串相关的函数。

对以为数据进行处理,首先要从CSV格式文件中读入以为数据,并将其表示为列表对象,但是从CSV文件获得内容时,最后一个元素后面包含了一个换行符('\n'),需要采用字符串的方法strip()去掉尾部的换行符,进一步使用split()方法进行分割

f = open('D:/test.csv','r')
ls = f.read().strip('\n').split(',')
print(ls)
f.close()

实际上python的第三方库pandas中的read_csv()函数可以直接将CSV文件读入为DataFrame格式。

2.2、二维数据的处理

二维数据可以看成由多个以为数据组成,也就是一维数据的组合形式。

# CSV文件的每一行都是一维数据,整个CSV文件是二维数据
ls = [
['姓名','学号','语文成绩','数学成绩','英语成绩','排名'],
['小明','123456','100','100','100','1'],
['小华','111111','90','90','90','2'],
['小红','222222','80','80','80','3'],
['小亮','333333','70','70','70','4'],
]
#采用循环遍历和字符串的join()方法结合将二维列表对象输出为CSV格式文件
f = open('D:/class.csv','w')
for row in ls:
    f.write(','.join(row) + '\n')
f.close()

用Excel打开CSV文件如下图所示:

                            

参考文献:

廖雪峰的官方网站     https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431917590955542f9ac5f5c1479faf787ff2b028ab47000

Python手册 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值