第13章 数据处理
学习要点
一维及二维数据的相关知识:表示、存储、格式化、读入文件、写入文件、 提取数据、CSV文件的操作、添加数据。
对标内容
掌握一维数据的表示和读写方法,能够编写程序处理一维数据。
掌握二维数据的表示和读写方法,能够编写程序处理二维数据。
掌握CSV格式文件的读写方法。
情境导入
一份班级期中考试成绩表,就是一个二维数据。
Python是强大的数据处理工具,最基础的数据文件有一维数据、二维数据、 CSV格式数据文件。
一维数据:由对等关系的有序或无序数据组成,采用线性方式组成。
二维数据:由多个一维数据构成,是一维数据的组合形式。
CSV ( Comma-Separated Values )格式数据文件:国际通用的一二维数据存储格式,扩展名一般为.csv,每行存储一个一维数据,采用逗号分隔,无空行。 Excel和一般文字编辑软件都可以读入或保存CSV文件。
下面,我们来讲解以上3种数据文件的概念、使用场景、读写操作。
简单的文件写入
文件写入的一般步骤:
#一、以写的方式打开文件
f=open('文件名','w')
#二、向文件写内容
f.write('写入的内容')
#三、关闭文件
f.close()
write()函数的使用
write()函数的参数是一个字符串,分以下两种情况。
通过write()函数向文件中写入一行数据。
>>> f=open("test2.txt",'w') #test2.txt文件和代码文件保存在一个路径下 >>> f.write('hello,world!\n') #写入的字符串在末尾包含一个换行符 >>> f.close()
运行程序,结果如图13-4所示。
图13-4 通过write()函数向文件中写入一行数据
通过write()函数向文件中写入多行数据。
>>> f=open (r"C:\test.txt",'w') #指定文件路径,字符串前面加“r”是为了防止字符转义, >>> f.write('hello python!\nhello world!\n') # 写入的字符串包含多个换行符 >>> f.close()
运行程序,结果如图13-5所示。
图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所示。
图 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所示。
图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 单选题
有如下程序:
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为文件变量名)。()
答案:正确
解析:数据以“,”合并成字符串,字符串末尾加换行符。
二维数据
知识点详解
二维数据由多个一维数据构成,是一维数据的组合形式,可以用二维列表表示。列表的每个元素对应二维数据的一行,这个元素本身也是列表。
二维数据一般采用相同的数据类型存储数据。
二维数据的表示:
二维数据用CSV格式存储。CSV文件的每一行是一维数据,整个CSV文件是一个二维数据,如图13-2所示。
图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 单选题
要对二维列表所有的数据进行格式化输出,打印成表格形状,程序段如下:
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])
易错点
- 注意对比下列函数或方法的用法与区别:open()、 write()、writelines()、 writer()、writerow()、writerows()。
- 注意对比下列函数或方法的用法与区别:read()、readline()、readlines()、reader()。
模拟考题
考题1 判断题
在Python中,可以使用下面的代码读取文件中的数据到列表。( )
file = open('score.csv','r')
name = file.read().strip('\n').split(',')
file.close()
答案:正确
解析:这是在考核read()函数的用法。
考题2 编程题
请读取文件plant.csv中的数据,数据内容如下图所示。
下列代码实现了读取“植物编号”和“生长情况”信息,输出“生长情况” 达到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的数据,数据内容如下图所示。
下列代码实现了读取数据并分别统计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"文件中
写入方式一: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文件内容如下,那么下列代码的输出结果是?( )
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]