open读文件open()中"a"为追加写,w为删除原有内容从头写,r为只读,r+和w+都为读写(从头) file=open(path,"a",newline="")
.
csv.reader和csv.writer读写文件,np数组用scv.writer.writerow()和writerows
可以直接写入csv中.
if x in 列表y : return[i for i in range(len(y)) if y(i)==x] else 列表.append()
这里用的是[],用()的话返回的是生成器.
"""---------*- coding: utf-8 -*------------------File Name:ex0Author: kingsCatdate:/3/2 14:04Description: ----------------------------------------------"""import tqdmfrom sklearn import datasetsimport numpy as npimport csvimport time# 将相应的非数字类型转换为数字标识即符号型数据转化为数值型数据def find_index(x, y):return [i for i in range(len(y)) if y[i] == x]# 定义将源文件行中3种协议类型转换成数字标识的函数def handleProtocol(input):protocol_list = ['tcp', 'udp', 'icmp']if input[1] in protocol_list:return find_index(input[1], protocol_list)[0]# 定义将源文件行中70种网络服务类型转换成数字标识的函数def handleService(input):service_list = ['aol', 'auth', 'bgp', 'courier', 'csnet_ns', 'ctf', 'daytime', 'discard', 'domain', 'domain_u','echo', 'eco_i', 'ecr_i', 'efs', 'exec', 'finger', 'ftp', 'ftp_data', 'gopher', 'harvest','hostnames','http', 'http_2784', 'http_443', 'http_8001', 'imap4', 'IRC', 'iso_tsap', 'klogin', 'kshell','ldap','link', 'login', 'mtp', 'name', 'netbios_dgm', 'netbios_ns', 'netbios_ssn', 'netstat', 'nnsp','nntp','ntp_u', 'other', 'pm_dump', 'pop_2', 'pop_3', 'printer', 'private', 'red_i', 'remote_job', 'rje','shell','smtp', 'sql_net', 'ssh', 'sunrpc', 'supdup', 'systat', 'telnet', 'tftp_u', 'tim_i', 'time','urh_i', 'urp_i','uucp', 'uucp_path', 'vmnet', 'whois', 'X11', 'Z39_50']if input[2] in service_list:return find_index(input[2], service_list)[0]# 定义将源文件行中11种网络连接状态转换成数字标识的函数def handleFlag(input):flag_list = ['OTH', 'REJ', 'RSTO', 'RSTOS0', 'RSTR', 'S0', 'S1', 'S2', 'S3', 'SF', 'SH']if input[3] in flag_list:return find_index(input[3], flag_list)[0]# 定义将源文件行中攻击类型转换成数字标识的函数(训练集中共出现了22个攻击类型,而剩下的17种只在测试集中出现)def handleLabel(input):# label_list=['normal.', 'buffer_overflow.', 'loadmodule.', 'perl.', 'neptune.', 'smurf.',# 'guess_passwd.', 'pod.', 'teardrop.', 'portsweep.', 'ipsweep.', 'land.', 'ftp_write.',# 'back.', 'imap.', 'satan.', 'phf.', 'nmap.', 'multihop.', 'warezmaster.', 'warezclient.',# 'spy.', 'rootkit.']global label_list # 在函数内部使用全局变量并修改它if input[41] in label_list:return find_index(input[41], label_list)[0]else:label_list.append(input[41])return find_index(input[41], label_list)[0]if __name__ == "__main__":# 加载数据集,并且把data和target合并起来kdd = datasets.fetch_kddcup99(data_home="./kdd-set", download_if_missing=False, random_state=1)X, Y = kdd.data, kdd.targetY = np.expand_dims(Y, 1) # 在1上扩容,就相当于进入一个[]后再在每个元素中添加[]Z = np.append(X, Y, axis=1) # 在列上合并.就是指把每一列一溜溜的拍起来.||和|||合并就成就了|||||print(Z.shape)source_path = "./kdd-set"handled_path = "./handled.csv"# 打开文件data_file = open(handled_path, "w", newline="") # 若没有这个文件,直接就能创建# csv写器csv_writer = csv.writer(data_file)label_list = []for i in tqdm.trange(Z.shape[0]):buffer = Z[i]buffer[1] = handleProtocol(buffer) # 将源文件行中3种协议类型转换成数字标识buffer[2] = handleService(buffer) # 将源文件行中70种网络服务类型转换成数字标识buffer[3] = handleFlag(buffer) # 将源文件行中11种网络连接状态转换成数字标识buffer[41] = handleLabel(buffer) # 将源文件行中23种攻击类型转换成数字标识csv_writer.writerow(buffer)# 输出每行数据中所修改后的状态data_file.close()def 验证csv读写方式():path="./handled.csv"# open()中"a"为追加写,w为删除原有内容从头写,r为只读,r+和w+都为读写(从头)file=open(path,"a",newline="")writer=csv.writer(file)for i in range(10):print(i)writer.writerow(np.array([1,2,i]))file.close()