第13章 数据处理

学习要点

一维及二维数据的相关知识:表示、存储、格式化、读入文件、写入文件、 提取数据、CSV文件的操作、添加数据。

对标内容

掌握一维数据的表示和读写方法,能够编写程序处理一维数据。

掌握二维数据的表示和读写方法,能够编写程序处理二维数据。

掌握CSV格式文件的读写方法。

情境导入

一份班级期中考试成绩表,就是一个二维数据。

Python是强大的数据处理工具,最基础的数据文件有一维数据、二维数据、 CSV格式数据文件。

一维数据:由对等关系的有序或无序数据组成,采用线性方式组成。

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

CSV ( Comma-Separated Values )格式数据文件:国际通用的一二维数据存储格式,扩展名一般为.csv,每行存储一个一维数据,采用逗号分隔,无空行。 Excel和一般文字编辑软件都可以读入或保存CSV文件。

下面,我们来讲解以上3种数据文件的概念、使用场景、读写操作。

简单的文件写入

文件写入的一般步骤:

#一、以写的方式打开文件
f=open('文件名','w')
#二、向文件写内容
f.write('写入的内容')
#三、关闭文件
f.close()

write()函数的使用

write()函数的参数是一个字符串,分以下两种情况。

  1. 通过write()函数向文件中写入一行数据。

    >>> f=open("test2.txt",'w') #test2.txt文件和代码文件保存在一个路径下
    >>> f.write('hello,world!\n') #写入的字符串在末尾包含一个换行符
    >>> f.close()
    

    运行程序,结果如图13-4所示。

    image-20220519164315720

    ​ 图13-4 通过write()函数向文件中写入一行数据

  2. 通过write()函数向文件中写入多行数据。

    >>> f=open (r"C:\test.txt",'w') #指定文件路径,字符串前面加“r”是为了防止字符转义,
    >>> f.write('hello python!\nhello world!\n') # 写入的字符串包含多个换行符
    >>> f.close()
    

    运行程序,结果如图13-5所示。

    image-20220519164411047

    ​ 图13-5 通过write()函数向文件中写入多行数据

注意:write()需要传入一个字符串作为参数,否则会报错;

writelines()函数的使用

writelines()既可以传入字符串,也可以传入一个字符序列,并将该字符序列写入文件。

f=open (r"C:\test.txt",'w')
f.writelines(['111\n','222\n'])
f.close()

说明:向文件写入一个序列字符串列表时,如果需要换行则要自己加入每行的换行符

简单的文件读取

文件读取的一般步骤:

#一、以读的方式打开文件
f=open('文件名','r')
#二、读取文件内容
s=f.read()
#三、关闭文件
f.close()
print(s)

read()函数的使用

从文件"d:\test.txt”中读取数据,文件内容如图13-3所示。

image-20220519163748805

​ 图 13-3 "C:\test.txt” 的内容 (1)

>>> f=open(r"d:\test.txt",'r')
>>> s=f.read() #从文件指针所在的位置,读到文件结尾
>>> s
'hello python!\nhello world!\n'
>>> f.close()

(2)

>>> f=open(r"d:\test.txt",'r')
>>> s1=f.read(15) #从文件指针所在的位置开始读15个字节
>>> s2=f.read() #从文件指针所在的位置读到文件结尾
>>> f.close()
>>> s1
'hello python!\nh'
>>> s2
'ello world!'
>>> print(s1,s2)
hello python!
h ello world!

(3)

»> f=open(r"d:\test.txt",'r')
»> sl=f.read() #读取文件中的所有内容,返回一个字符串
»> s2=f.read() #读取到了 0个字节,因为文件指针已经读到文件尾部
»> f.close()
»> s1
'hello python!\nhello world!\n'
»> s2
''

readline()、readlines()的使用

read()每次读取整个文件,它通常将读取到的文件内容放到一个字符串变量中,也就是说read()生成的文件内容是一个字符串。 readline()每次只读取文件的一行,通常也是将读取到的一行内容放到一个字符串变量中,返回str类型数据。

readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中, 返回list类型数据。

readline()的使用

f=open(r"d:\test.txt",'r')
s=f.readline() #从文件指针所在的位置,读到文件结尾
print(s,end='')
s2=f.readline()
print(s2,end='')
s3=f.readline()
print(s3,end='') 
f.close()

运行结果如下:

hello python!
hello world!

readlines()的使用

f=open(r"d:\test.txt",'r')
s=f.readlines()
print(s)
f.close()

运行结果如下:

['hello python!\n', 'hello world!\n']

with语句打开文件

前面使用open打开文件,不论是读还是写,都必须调用close()方法关闭文件,否则资源就会一直被该程序占用而无法被释放。

使用with语句不需要自己调用close()方法关闭文件,with语句会自动帮我们关闭,例如下列代码:

with open(r"d:\test.txt",'w') as f
    f.write('hello,world!\n')

打开模式

"w": 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

"r": 以只读方式打开文件,文件的指针将会放在文件的开头。

"w+" :打开一个文件用于读写。

"r+":打开一个文件用于读写。文件指针将会放在文件的开头。

"a": 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 "a+": 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

一维数据

知识点详解

一维数据由对等关系的有序或无序数据构成,釆用线性方式组织,对应数学中的数组的概念。

一维数据具有线性特点。

任何表现为序列或集合的对象都可以看作一维数据。

在Python中,一维数据主要釆用列表形式表示。

c=['北京','上海','广州','深圳']        #数据用列表变量c表示
print(c)                         #关注元素类型

一维数据的存储:

  • 采用空格分隔元素;
  • 采用逗号分隔元素(常用,CSV格式);
  • 采用换行分隔元素;
  • 采用其他特殊符号(比如;)分隔元素。

CSV格式就是采用逗号分隔值,它是一种通用的、相对简单的文件格式, 广泛应用,Excel、记事本等大部分编辑器支持直接读入或保存CSV格式文件。 CSV文件的扩展名为.csv。

将列表对象输出为CSV格式文件,示例如下。

c=['北京','上海','广州','深圳']
f=open('city.csv','w')
f.write(','.join(c)+'\n')
f.close()

注意:f.close()如果不写,则写的内容不能保存的文件中。

在上述Python程序的同目录下,如果存在city.csv文件,执行上述程序, 将覆盖city.csv文件(如果想非覆盖,将'w'改为'a'即可);如果不存在city.csv文件,执行上述程序后,将产生一个city.csv文件,内容如图13-1所示。

image-20220519101702182

​ 图13 -1 city.csv文件的内容 

说明:如果文件不想和Python程序在同目录下,可以具体制定路径,如下:

f=open(r'd:\yyds\cj.csv','w') #字符串前面加“r”是为了防止字符转义

使用with语句打开文件,处理结束后会自动关闭被打开的文件。上述代码用with语句改写如下。

c=['北京','上海','广州','深圳']
with open('city.csv','w') as f:
    f.write(','.join(c)+'\n')

从csv格式文件中读出数据,表示为列表对象,示例如下。

f=open('city.csv','r')
c=f.read().strip().split(',') 
f.close()
print(c)

上述代码用with语句改写如下。

with open('city.csv','r') as f: 
    c=f.read().strip().split(',') 
print(c)

易错点

  1. 如果对二维数据的概念掌握不清晰,会导致送分题答题错误率较高。
  2. 要理解上述两段代码每一行的含义。

模拟考题

考题1 单选题

有如下程序:

ls=['武汉','温州','香港','重庆']
f=open('city.csv','w')
f.write(','.join(ls)+'\n')
f.close()

下列说法正确的是()。

A.有可能抛出错误

B. 将输出字符串

C.当前程序的功能是将csv文件表示为列表对象

D.当前程序的功能是将列表对象输出到csv文件

答案:D

解析:当前程序的功能是将列表对象写到city.csv文件中,所以选D。

考题2 判断题 在Python中,为了确保列表中每个写入CSV文件中的数据,在电子表格软件中打开时都作为一个单元格存在,可以使用file.write(','.join(name)+'\n') 语句(file为文件变量名)。()

答案:正确

解析:数据以“,”合并成字符串,字符串末尾加换行符。

二维数据

知识点详解

二维数据由多个一维数据构成,是一维数据的组合形式,可以用二维列表表示。列表的每个元素对应二维数据的一行,这个元素本身也是列表。

二维数据一般采用相同的数据类型存储数据。

二维数据的表示:

image-20220519163001444

二维数据用CSV格式存储。CSV文件的每一行是一维数据,整个CSV文件是一个二维数据,如图13-2所示。

image-20220519162612055

​ 图13-2 用CSV格式存储的二维数据 将列表对象输出为csv格式,示例如下。

c=[
    ['张三','95','98','78','65'],
    ['李四','85', '89', '68', '93'],
    ['王五','99', '89', '86', '90'],
]
f=open('cj.csv','w')
for i in c:
    f.write(','.join(i) + '\n')
f.close()

在上述Python程序的同目录下,如果存在cj.csv文件,运行上述程序后, 将覆盖cj.csv文件;如果不存在cj.csv文件,运行上述程序后,将产生一个 cj.csv文件,内容如图13-2所示。

从CSV格式文件读出数据,表示为列表对象,示例如下。

f=open('cj.csv','r')
c=[]
for i in f:
    c.append(i.strip('\n').split(','))
f.close()
print(c)
[['张三','95', '98', '78', '65'],[
'李四’,’85', '89', '68', '93'],['
王五'99', '89', '86', '90']]

易错点

  1. 如果对二维数据的概念掌握不清晰,会导致送分题答题错误率较高。
  2. 要理解上述两段代码每一行的含义。

模拟考题

考题1 单选题

要对二维列表所有的数据进行格式化输出,打印成表格形状,程序段如下:

ls =[['金京',89],['吴树海',80],['王津津',90]]
for row in range(len(ls))for column in range(len(ls[row])): 
        print(______, end='\t')
print()

画线处的代码应该为()。

A. ls[row][column] B. ls[row] C. ls[column] D. ls[column][row]

答案:A

解析:根据二维数据的切片可得答案。

csv模块

writer()函数的使用

CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。可以把它理解为一个表格,只不过这个表格是以纯文本的形式显示的,单元格与单元格之间,默认使用逗号进行分隔;每行数据之间,使用换行进行分隔。

name,age,score
zhangsan,18,98
lisi,20,99
wangwu,17,90
jerry,19,95

python自带csv模块,直接导入使用即可,导入方式如下:

import csv

方法1:writerow单行写入

import csv
with open('xxxx.csv','w',newline='') as f: 
    writer = csv.writer(f)    #创建初始化写入对象
    writer.writerow(['color','red'])    # 一行一行写入

在Windows里保存的CSV文件是每空一行存储一条数据,使用newline=”可保证存储的数据没有空行。

方法2:writerows多行写入

import csv
with open('xxxx.csv','w') as f: 
    writer = csv.writer(f)
    writer.writerows([('color','red'), ('size','big'),('male','female')])    #多行写入

reader()函数的使用

导入模块csv之后,我们将CSV文件打开,并将结果文件对象存储在f中。 然后,调用csv.reader(),将前面存储的文件对象作为实参传递给它,从而创建一个与该文件相关联的阅读器(reader )对象,等待进一步处理,如下例所示。

import csv
with open("xxxx.csv",'r') as f:
    rows = list(csv.reader(f))
    print(rows)

运行结果如下:

[['color', 'red'], ['size', 'big'], ['male', 'female']]

next()一行一行读取

import csv
with open('xxxx.csv') as f:
    reader=csv.reader(f)
    head_row=next(reader)
    print(head_row)
    head_row=next(reader)
    print(head_row)

reader对象的遍历

song.csv文件中第一列是歌曲名,使用以下Python程序可以把歌曲名单一一读取出来。

import csv
with open('song.csv', 'r') as f:
   reader = csv.reader(f)
   for i in reader:
     print(i[0])

易错点

  1. 注意对比下列函数或方法的用法与区别:open()、 write()、writelines()、 writer()、writerow()、writerows()。
  2. 注意对比下列函数或方法的用法与区别:read()、readline()、readlines()、reader()。

模拟考题

考题1 判断题

在Python中,可以使用下面的代码读取文件中的数据到列表。( )

file = open('score.csv','r')
name = file.read().strip('\n').split(',')
file.close()

答案:正确

解析:这是在考核read()函数的用法。

考题2 编程题

请读取文件plant.csv中的数据,数据内容如下图所示。

image-20220519164619507 下列代码实现了读取“植物编号”和“生长情况”信息,输出“生长情况” 达到6的数量,请你补全代码。

import csv
with open("plant.csv") as f: 
    rows = list(___①___(f)) 
    s=0
    for row in rows[1:]: 
        if (___②___>=6):
            s=s + 1
print(s)

参考答案:

① csv.reader ( 2 分) ② int(row[1]) 或等效答案(2分)

解析:这是在考核reader()函数的用法。

考题3 编程题

请读取1班和2班语文学科的成绩文件score.csv的数据,数据内容如下图所示。 image-20220519163450165

下列代码实现了读取数据并分别统计1班和2班语文成绩的和,请你补全代码。

import csv
with open("___①___") as f: 
    rows = list(csv.reader(f)) 
    suml = 0
    sum2 = 0
    for row in rows[1:]:
        if int(___②___) == 1:
            suml += int(row[1]) 
        else:
            sum2 += int(row[1]) 
    print(___③___)

参考答案:

① score.csv (1 分) ② row[0] ( 2 分) ③ suml ,sum2 ( 1 分) 

其他方法

  • seek() 方法用于移动文件读取指针到指定位置

    fileObject.seek(offset[, whence])
    
    • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

    • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

练习

按照下图把“登高”写入到"d:\dg.txt"文件中

image-20220826132838004

写入方式一:write()方法

f=open(r'd:\dg.txt','w')
f.write("                       登高\n")
f.write("                                作者:杜甫\n")
f.write("风急天高猿啸哀,渚清沙白鸟飞回。\n")
f.write("无边落木萧萧下,不尽长江滚滚来。\n")
f.write("万里悲秋常作客,百年多病独登台。\n")
f.write("艰难苦恨繁霜鬓,潦倒新停浊酒杯。\n")
f.close()

写入方式二:writelines()方法

f=open(r'd:\dg.txt','w')
dg=[
   "                       登高\n",
   "                                作者:杜甫\n",
   "风急天高猿啸哀,渚清沙白鸟飞回。\n",
   "无边落木萧萧下,不尽长江滚滚来。\n",
   "万里悲秋常作客,百年多病独登台。\n",
   "艰难苦恨繁霜鬓,潦倒新停浊酒杯。\n"
]
f.writelines(dg)
f.close()

把上面文件读取出来,并输出显示

读取方式一:readline()

f=open(r'd:\dg.txt','r')
c=f.read()
print(c)
f.close()

读取方式二:readline()

f=open(r'd:\dg.txt','r')
c=f.readline()
while c:
    print(c,end="")
    c=f.readline()
f.close()

读取方式三:readlines()

f=open(r'd:\dg.txt','r')
c=f.readlines()
d=''.join(c)
print(d)
f.close()

使用csv模块进行读写

import csv
dg=[
   ("登高",),
   ("作者:杜甫",),
   ("风急天高猿啸哀,","渚清沙白鸟飞回。"),
   ("无边落木萧萧下,","不尽长江滚滚来。"),
   ("万里悲秋常作客,","百年多病独登台。"),
   ("艰难苦恨繁霜鬓,","潦倒新停浊酒杯。")
]

with open(r'd:\dg.csv','w',newline='') as f: 
    writer = csv.writer(f)    #创建初始化写入对象
    writer.writerows(dg)    #多行写入

读取

import csv
with open(r'd:\dg.csv','r') as f:
    rows = list(csv.reader(f))
    for row in rows:
        for c in row:
            print(c,end="")
        print()

文件和数据处理单元测试

模拟考题

一、单选题(共25题,每题2分,共50分)

1、如下程序段:

ls=['武汉','温州','香港','重庆']
f=open('city.csv','w')
f.write(','.join(ls)+'\n')
f.close()

下列说法正确的是?( )

A. f=open('city.csv','w')说明当前是读取模式

B. f.write(','.join(ls)+'\n')语句改成f.write(' '.join(ls)+'\n'),结果依然以逗号分隔

C. 删除f.close()语句,也能保存文件

D. 当前程序的功能是将列表对象输出到CSV文件

2、用open()打开文件时,返回的是?( )

A. 列表

B. 字符串

C. 文件对象

D. 元组

3、打开a.txt文件后,将“See you next time.”写入文件,下列语句不正确的是?( )

A. f.write('See you next time.\n')

B. f.write(['See',' you',' next',' time','.\n'])

C. f.writelines(['See you next time.\n'])

D. f.writelines(['See',' you',' next',' time','.\n'])

4、把文件写入到csv文件的程序段如下:

ls=['北京','上海','天津','重庆']
f=open("city.csv","w")
______________
    f.write(','.join(row)+'\n')
f.close()

划线处的代码应该为?( )

A. for i in ls:

B. for row in ls:

C. for i in range(len(ls)):

D. for row in range(len(ls)):

5、关于open()函数的参数,下列描述不正确的是?( )

A. 'r'以只读方式打开文件

B. 'w'以写入的方式打开文件,如果文件不存在,则会提示错误

C. 'a'打开文件,并将新内容写入到已有内容之后

D. 'r+'以读、写方式打开文件

6、关于语句f=open('d:/a.txt', 'r'),下列描述不正确的是?( )

A. f是变量

B. 'r'以只读方式打开文件

C. 如果文件a.txt不存在,不会报错

D. ‘d:/a.txt’是文件路径,代表d盘中一个名为‘a.txt’的文件

7、假设city.csv文件内容如下,那么下列代码的输出结果是?( )

image.png

f=open("city.csv","r")
ls=f.read().split(",")
f.close()
print(ls)

A. ['巴哈马','巴林','孟加拉国','巴巴多斯\n白俄罗斯','比利时','伯利兹']

B. ['巴哈马','巴林','孟加拉国','巴巴多斯','白俄罗斯','比利时','伯利兹']

C. ['巴哈马,巴林,孟加拉国,巴巴多斯,白俄罗斯,比利时,伯利兹']

D. ['巴哈马','巴林','孟加拉国','巴巴多斯','\n','白俄罗斯','比利时','伯利兹']

8、关于open()函数的参数,下列描述正确的是?( )

A. "w+" 以十六进制格式打开一个文件只用于写入

B. "r+"打开一个文件用于读写。文件指针将会放在文件的末尾

C. "w" 打开一个文件只用于写入。如果该文件已存在则打开文件,并从原有位置开始编辑,即保留原有内容。如果该文件不存在,创建新文件

D. "r" 以只读方式打开文件,文件的指针将会放在文件的开头

9、Python中使用open()函数打开文件完成读的功能,下列说法错误的是?( )

A. readlines()方法是读取文本所有的行,直到文件末尾

B. readline()方法第一次读取的是文件的第一行

C. 在同一个程序中,多次使用readline()方法后,程序仍读取第一行的内容

D. 执行readline()方法后,运行的结果不是列表,而是字符串

10、Python文件常用的写入方式有w+和a+,它们的相同点是?( )

A. 覆盖写

B. 追加写

C. 若文件不存在就创建

D. 每次写的时候会自动覆盖上一次的内容

11、给已有文件“实验中学学生花名册.txt”增加两名学生,而且不能覆盖原有的内容。 下面代码正确的是?( )

A.

filename="实验中学学生花名册.txt" 
with open(filename,"w") as f:
    f.write("黎明\n")
    f.write("方芳\n")

B.

filename="实验中学学生花名册.txt" 
with open(filename,"r") as f:
    f.write("黎明\n")
    f.write("方芳\n")

C.

filename="实验中学学生花名册.txt" 
with open(filename,"r+") as f:
    f.write("黎明\n")
    f.write("方芳\n")

D.

filename="实验中学学生花名册.txt"
with open(filename,"a") as f:
    f.write("黎明\n")
    f.write("方芳\n")

12、以下程序执行程序后,"中国诗人.txt"文件内容为?( )

filename = "中国诗人.txt" 
with open(filename,"w") as file: 
    file.write("唐 李白\n")
    file.write("唐 白居易\n")

A. 唐 李白 唐 白居易

B.
唐 李白 唐 白居易

C. 唐 李白\n 唐 白居易

D. 唐 李白\n 唐 白居易\n

13、关于文件的读写,下列解释表述错误的是?( )

A. 读取模式('r')

B. 写入模式('w')

C. 读写模式('w')

D. 附加模式('a')

14、动物.CSV的文件内容如下:'老虎', '狗', '大象', '牛',下列程序从该CSV文件读出数据并输出列表格式,划线处正确的代码选项应该为?( )

f=open('动物.CSV','r')
a=f.read().strip().split(______)
f.close()
print(a)

A. ';'

B. ','

C. '\n'

D. '\t'

15、下面程序生成CSV格式文件:

王鑫,86,90,92,99,94,95 
杨小虹,93,97,95,90,86,85 
李静,89,98,99,94,90,85

程序如下:

a=[['王鑫','86','90','92','99','94','95'],['杨小虹','93','97','95','90','86','85'],['李静','89','98','99','94','90','85']]
f=open('成绩.CSV','w')
for i in a:
  f.write(','.join(i)+______)
f.close()

划线处的代码应该为?( )

A. 'r'

B. 'w'

C. '\t'

D. '\n'

16、如果要设计班级通讯录管理功能,需要往address.csv文件中追加新记录,则应该使用以下哪一种打开文件的方式

A. open('address.csv','a+')

B. open('address.csv','w+')

C. open('address.csv','wb+')

D. open('address.csv','rb+')

17、 有这样一段程序:

a=[“香蕉“,”苹果”,”草莓”,“哈密瓜”]
fs=open(“fruits.csv”,”w”)
fs.write(,.join(a)+‘\n’)
fs.close()

该段程序执行后,该csv文件中的内容是?( )

A. 香蕉 苹果 草莓 哈密瓜

B. 香蕉,苹果,草莓,哈密瓜

C. 香蕉苹果草莓哈密瓜

D. ["香蕉","苹果","草莓","哈密瓜"]

18、关于文件的读写操作,下列说法不正确的是?( )

A. read( )函数读取文件内容后,生成的是一个字符串

B. readline( )每次只读取文件中的一行,并返回字符串类型数据

C. readlines( )函数每次按行读取整个文件的内容,并返回list类型数据

D. 读取文件内容只能用reader( )对象

19、对于在csv文件中追加数据,下列说法正确的是?( )

A. 只能以单行方式追加数据

B. 只能以多行方式追加数据

C. 多行数据追加的函数是writerow( )

D. 以单行方式或多行方式追加都可以

20、关于下述代码,下列说法正确的是?( )

a=["跳绳","跳高","跳远","铅球"] 
fs=open("sports.csv","w")
fs.write(" ".join(a)+'\n')
fs.close()

A. 若”sports.csv”文件不存在,则程序出错

B. 程序的最后结果是:跳绳 跳高 跳远 铅球

C. 程序中的fs.close()代码可有可无

D. “w”参数表示不能修改原csv文件

21、一维数据可以存储在CSV格式文件中,下列描述正确的是?( )

A. 必须采用逗号分隔数据元素

B. 必须采用空格来分隔数据元素

C. 必须采用分号分隔数据元素

D. 允许采用特殊字符来分隔数据元素

22、如果需要使用open函数以可读可写的方式打开一个存储二维数据的CSV文件,则open函数的文件打开模式不能设置成?( )

A. rw

B. r+

C. w+

D. a+

23、打开b.txt文件,将"Hello Tom!"写入文件,下列语句正确的是?( )

A. f.write(['Hello'],[Tom!])

B. f.read('Hello',' Tom!')

C. f.write('Hello Tom!')

D. f.read('Hello Tom!')

24、有如下代码:

res = []
f = open('Python08.txt','r')  #Python08.txt中共4行诗句
p = f.readlines()
for s in p:
    res.append(s)
print(res)
f.close()

对于该段代码,说法不正确的是?( )

A. 程序的功能是按行读取文本文件中的内容,并将其逐一写入列表res

B. 此处readlines()用法错误,应改成readline()

C. 该文本文件和程序代码文件在同一文件夹下

D. 参数'r'不允许修改该文本文件

25、有代码如下:

s=["白日依山尽","黄河入海流","欲穷千里目","更上一层楼"]
f=open('sj.txt','w')
f.write('\n'.join(s))
f.close()

关于上述代码,说法不正确的是?( )

A. 写入文本文件的步骤主要是打开——写入——关闭

B. f.write('\n'.join(s))与f.write(' '.join(s)+'\n')的功能是相同的

C. write()的参数是一个字符串,而writelines()的参数可以是字符串也可以是字符序列

D. 该代码的功能是将列表中的诗句按行写入文本文件

二、判断题(共10题,每题2分,共20分)

26、小明准备编写一个程序,把新同学的联系方式保存到一个名为list的现有CSV格式文件里。实现这一功能可以使用语句f=open('list.csv','a+')来打开list.csv文件。

​ 正确 错误

27、在Python中,向csv文件中写入数据时,用空格分割列表name中的元素,可以使用

file.write(' '.join(name)+'\n')语句(file为文件变量名)。

​ 正确 错误

28、CSV文件的每一行都是一维数据,因此它的每一行都可以用列表类型来表示。

​ 正确 错误

29、数据可分为一维数据、二维数据和多维数据。

​ 正确 错误

30、CSV文件的每—行是一维数据,可以使用Python中的列表类型表示。

​ 正确 错误

31、利用Python3自带的csv库进行操作,可使用以下程序获取class.csv文件中存储的表头信息,并进行输出。

import csv
with open('class.csv') as f:
    reader=csv.reader(f)
    head_row=next(reader)
    print(head_row)

​ 正确 错误

32、利用csv格式存储二维数据时,每行都是一个一维数据,用逗号分隔,可以有空行。

​ 正确 错误

33、多次使用readline()读取文件,如果要退到文件的起始位置,可以使用seek()实现。

​ 正确 错误

34、readline()执行结果为字符串,readlines()执行结果为列表。

​ 正确 错误

35、song.csv文件中第一列是歌曲名,使用以下Python程序可以把歌曲名单一一读取出来。

import csv
with open('song.csv', 'r') as f:
     reader = csv.reader(f)
     for i in reader:
         print(i[0])

​ 正确 错误

答案

一、单选题

1、D 2、C 3、B 4、B 5、B

6、C

试题解析:文件打开方式错误:r只读,不创建文件,如果文件a.txt不存在,会报错

7、A

试题解析:在Python中,split()方法通过指定分隔符对字符串进行切片,返回分隔后的字符串列表。以spit(".")方法从CSV文件中获得内容时,无法去除换行符。'巴巴多斯\n白俄罗斯'作为一个列表元素出现,最后输出列表故选A选项。

8、D

试题解析: "w+" 打开一个文件用于读写。

"r+"打开一个文件用于读写。文件指针将会放在文件的开头。

"w" 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编

辑,即原有内容会被删除。如果该文件不存在,创建新文件。

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

9、C

10、C

试题解析:w+模式可读可写,若文件不存在就创建 a+模式可读可写,若文件不存在就创建

11、D 12、B 13、C 14、B 15、D 16、A

17、B

试题解析:open("fruits.csv","w")表示打开CSV文件,进行写入操作("w"表示可覆盖写入)。",".join(a)表示将a列表中的元素取出,并用","连接成新的字符串,写入文件。

18、D

试题解析:文件内容的读取可以视不同情况选择不同的函数,reader()也是其中之一。

19、D

试题解析:在CSV中追加数据可以用writerow( )函数进行一行一行写入,也可以用writerows( )函数进行多行写入数据

20、B

试题解析:程序段的功能是表示将a列表中各项元素用空格符进行连接,并写入到sports.csv文件中,“w”表示可写入。若文件不存在,可自动创建

21、D

试题解析:CSV格式文件允许采用特殊字符来分隔数据元素。

22、A

试题解析:open函数没有rw打开文件的模式

23、C

试题解析:f.write('Hello Tom!')

24、B

试题解析:readline()每次只读取文件的一行,而readlines()是每次按行读取整个文件的内容,返回list类型数据。

25、B

试题解析:f.write('\n'.join(s))是将序列s中的元素用换行符连接并写入文件,而f.write(' '.join(s)+'\n')是将序列中的元素用空格符连接后换行写入文件,结果不一样

二、判断题

26、正确

试题解析:掌握open函数的用法,'a+'表示以读和写的方式打开文件,追加内容,符合要求

27、正确 28、正确

29、正确

试题解析:数据可分为一维数据、二维数据和多维数据

30、正确

试题解析:CSV文件的每—行是一维数据,读取数据时使用逗号分隔存放在列表中。

31、正确

试题解析:利用csv库进行文件读取,通过变量读取表头信息并逐项打印

32、错误

试题解析:利用csv格式存储二维数据时,每行都是一个一维数据,用逗号分隔,不能有空行

33、正确 34、正确

35、正确

试题解析:通过文件的方式读取数据,再依次将读取的数据输出,注意输出只需要歌曲名单,即第一列i[0]

Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-10-10 11:45:04