讨论主题
习题1、
将 PPT 中 iris_data.csv 读取例子中不完美的两个部分完善
a. 存储数字数据的类型由字符串改成 float 或 int;
b. 使 data 中不包含最后一行空行。
strip( )方法 :用于移除字符串头尾指定的字符(默认为空格),用法
str.strip([chars]);
返回移除字符串头尾指定的字符生成的新字符串。eg:
str = "0000000 Runoob 0000000"
print (str.strip( '0' )) # 去除首尾字符 0
str2 = " Runoob " # 去除首尾空格
print (str2.strip())
>>
Runoob
Runoob
split( )
通过指定分隔符对字符串进行切片
str.split(str="", num=string.count(str))
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print (str.split( ))
print (str.split(' ', 1 ))
>>
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
enumerate( )函数 : 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标;
enumerate(sequence, [start=0])
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
这里实现取出下标索引
data
=
[]
with
open
(
'.././data/iris_data.csv'
,
'r'
)
as
file_in
:
for
i
in
file_in
:
#
消除最后一行空行
if
i
!=
'
\n
'
:
#
使用切片并不取逗号
data.
append
((i[
:-
1
]).
split
(
','
))
print
(data)
#
转换数据类型
for
line
in
data
:
for
ide
,
cell
in
enumerate
(line[
:-
1
])
:
l ine[ide]
=
float
(cell)
print
(data)
>>
[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'],
[[5.1, 3.5, 1.4, 0.2, 'Iris-setosa'],
习题2、
读取文件 iris_data.csv 中的数据并变形为一个字典,
字典的 key 是花朵的英文名, value 是对应的4个浮点数数值。如
{
"Iris-setosa": [4.9,3.1,1.5,0.1],
"...": [...],
...
}
字典的增加:
dict["key"] = "value"
data
=
[]
with
open
(
'.././data/iris_data.csv'
,
'r'
)
as
file_in
:
for
i
in
file_in
:
#
消除最后一行空行
if
i
!=
'
\n
'
:
#
使用切片并不取逗号
data.
append
((i[
:-
1
]).
split
(
','
))
print
(data)
#
转换数据类型
data_dict
=
{}
for
line
in
data
:
for
ide
,
cell
in
enumerate
(line[
:-
1
])
:
line[ide]
=
float
(cell)
# print(data)
#
写入字典
data_dict[line[
-
1
]]
=
line[
:-
1
]
print
(data_dict)
>>
{'Iris-setosa': [5.0, 3.3, 1.4, 0.2], 'Iris-versicolor':
习题3、
假设习题2中的四个数字对应的名字为: a, b, c, d
构造一个嵌套的字典存储花朵的信息, 并存为 json 文件.
{
"Iris-setosa": {
"a": 4.9,
"b": 3.1,
"c": 1.5,
"d": 0.1
},
...
}
#习题3、字典嵌套,并生成.json文件
data = []
with open('.././data/iris_data.csv','r') as file_in:
for i in file_in:
#消除最后一行空行
if i != '\n':
#使用切片并不取逗号
data.append((i[:-1]).split(','))
print(data)
#转换数据类型
data_dict = {}
data_dict_ins = {}
for line in data:
for ide,cell in enumerate(line[:-1]):
line[ide] = float(cell)
data_dict_ins['a'] = line[0]
data_dict_ins['b'] = line[1]
data_dict_ins['c'] = line[2]
data_dict_ins['d'] = line[3]
#另一种实现方式
# data_dict_ins[line[-1]] = dict(a=line[0],b=line[1],c=line[2],d=line[3])
#写入字典,注意!因为key有可能重复,要区分
data_dict[line[-1]+'-'+str(data.index(line))] = data_dict_ins
print(data_dict)
#存储为.json文件
import json
with open("L-output/output-1.json","w") as file_out:
json.dump(data_dict,file_out,indent=4)
>>
{'Iris-setosa-0': {'a': 5.9, 'b': 3.0, 'c': 5.1, 'd': 1.8}, 'Iris-setosa-1': {
output.json
{
"Iris-setosa-0": {
"a": 5.9,
"b": 3.0,
"c": 5.1,
"d": 1.8
},
"Iris-setosa-1": {
"a": 5.9,
"b": 3.0,
"c": 5.1,
"d": 1.8
},
"Iris-setosa-2": {
"a": 5.9,
"b": 3.0,
"c": 5.1,
"d": 1.8
},
2、
open 模式:
w 以写方式打开,
a 以追加模式打开
r+ 以读写模式打开
w+ 以读写模式打开
a+ 以读写模式打开
rb 以二进制读模式打开
wb 以二进制写模式打开
ab 以二进制追加模式打开
rb+ 以二进制读写模式打开
wb+ 以二进制读写模式打开
ab+ 以二进制读写模式打开
w+是打开后,清空原有内容,成为一个新的空文件,对这个空文件具有读写权限。
r+是打开后,可以读取文件内容吧,保存原有内容,追加写内容,写动作则是追加的新内容。
5、
10、
writelines()
方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n
write(str)的参数是一个字符串,就是你要写入文件的内容.
writelines(sequence)的参数是
字符序列,比如列表
fileObject.writelines( [ str ])
# 打开文件
fo = open("test.txt", "w")
print ("文件名为: ", fo.name)
seq = ["菜鸟教程 1\n", "菜鸟教程 2"]
fo.writelines( seq )
# 关闭文件
fo.close()