计算机二级Python考点解析12

当下 ║ 2018.09.11

人生苦短,我们都要用Python,大家要经常回看大纲~

1. 文件的使用:文件打开、读写和关闭。

2. 数据组织的维度:一维数据和二维数据。

3. 一维数据的处理:表示、存储和处理。

4. 二维数据的处理:表示、存储和处理。

5. 采用CSV格式对一二维数据文件的读写。

知识点

第一部分:文件的使用:文件打开、读写和关闭。

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

>>> f = open('/Users/a/test.txt', 'r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

>>> f.read()'Hello, world!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

>>> f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:

print(f.read())

不必调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

for line in f.readlines():

print(line.strip()) # 把末尾的'\n'删掉

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:

>>> f = open('/Users/a/test.txt', 'w')>>> f.write('Hello, world!')>>> f.close()

你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('/Users/a/test.txt', 'w') as f:

f.write('Hello, world!')

要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码。

细心的童鞋会发现,以'w'模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入'a'以追加(append)模式写入。

第二部分:数据组织的维度:一维数据和二维数据。

数据的维度是数据的组织形式:

一维形式,就是之前说的三种数据组合类型了

二维数据,是一维数据的组合形式,由多个一维数据组合形成

多维数据,由一维数据或者二维数据在新维度上形成的

高维数据,仅利用最基本的二元关系展示数据间的复杂结构

[ [3, 2, 1],

[1, 2, 3] ] ###二维数据

[1, 2, 3, 4, 5 ] #一维数据

第三部分:一维数据的处理:表示、存储和处理。

如果数据有序:使用列表类型,列表类型可以表达一维有序数据

for循环可以遍历数据,进而对每一个数据进行处理

如果无序:使用集合类型,集合类型可以表达一维无序数据

for循环可以遍历集合,进而对每一个数据进行处理

一维数据的存储

空格分开,不换行。缺点是数据中不能存在空格

逗号分隔,不换行。缺点是数据中不能存在逗号

其他方式,可以利用特殊符号或者特殊符号组合进行分隔例如’$’,缺点:需要根据数据特点进行定义,通用性比较差

一维数据的操作

指的是数据存储格式和表达方式之间的转换,将存储的数据读入程序,将程序表示的数据写入文件

举例

data.txt内容:中国$美国$日本$法国$罗斯$越南

txt=f.open(data.txt).read()

ls=txt.split("$")

f.close()

ls内容:中国 美国 日本 法国 罗斯 越南

ls=['英国','印度']

f=open(fname,'w')

f.write(' '.join(ls))

f.close()

第四部分:二维数据的处理:表示、存储和处理。

二维数据的表示:

列表类型可以表达二维数据

使用的列表是二维列表

使用两层for循环遍历列表的每一个元素

外层列表中的每一个元素可以对应表格的一行或者一列

使用二维列表

[ [3.1, 3.2, 3.3],

[3.4, 3.5, 3.6] ]

二维数据的存储

- 按行存或者按列存都可以,具体由程序决定

- 一般索引习惯: ls[row][column],先行后列

- 根据一般习惯,外层列表每个元素是一行,按行存

二维数据的存储和处理我们放到第五部分一起介绍。

第五部分:采用 CSV 格式对一二维数据文件的读写。

CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与Excel文件不同,CSV文件中:

值没有类型,所有值都是字符串

不能指定字体颜色等样式

不能指定单元格的宽高,不能合并单元格

没有多个工作表

不能嵌入图像图表

在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。

不是每个逗号都表示单元格之间的分界。所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。Python内置了csv模块。

从csv文件中读入数据

fo=open(fname)

ls=[]for line in fo:

line=line.replace('\n','')

ls.append(line.split(','))

fo.close()

把文件写入到csv文件中

ls=[[],[],[]]

f=open(fnam,'w')for item in ls:

f.write(','.join(item)+'\n')

f.close()

# join()函数的参数可以不是字符串,也可以是列表

处理每一个二维数据

for row in ls:

for column in row:

print(ls[row][column])

该来的终究会来,没有任何例外和奇迹。

E

N

D

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180911G1YLM600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券