接上回,我们生成了一个文件叫axtext.txt,内容是这样的:
0/ 2/1 12 48575443E8E0C79D active online normal match no
0/ 2/1 47 48575443E8E12E9D active online normal match no
0/ 2/1 48 48575443E8E1659D active online normal match no
....
读取之后生成了列表嵌套,像这样:
[['0/', '1/0', '2', '48575443E8E0BD9D', 'active', 'online', 'normal', 'match', 'no'], ['0/', '1/0', '16', '48575443E8E1269D', 'active', 'online', 'normal', 'match', 'no'], ['0/', '1/0', '18', '48575443E8E0B89D', 'active', 'online', 'normal', 'match', 'no'], ['0/', '1/0', '20', '48575443E8E09E9D', 'active', 'online', 'normal', 'match', 'no'], ['0/', '1/0', '3', '48575443E8E0BF9D', 'active', 'online', 'normal', 'match', 'no'], ['0/', '1/0', '6', '48575443E8E0E99D', 'active', 'online', 'normal', 'match', 'no']]
那么先在要把它写回到文件,
1、写回文本文件:
def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表.
file = open(filename,'a')
for i in range(len(data)):
s = str(data[i])
file.write(s)
file.close()
print("File ", filename, " saved")
file_name = "axtest_savelist.txt"
text_save(file_name,rs)
但是这是看到的文本文件内容是这样的:
['0/', '1/0', '2', '48575443E8E0BD9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '16', '48575443E8E1269D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '18', '48575443E8E0B89D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '20', '48575443E8E09E9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '3', '48575443E8E0BF9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '6', '48575443E8E0E99D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '5', '48575443E8E0CC9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '4', '48575443E8E0C19D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '0', '48575443E8E0A59D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '11', '48575443E8E10A9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '8', '48575443E8E1029D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '10', '48575443E8E1079D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '1', '48575443E8E0B79D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '12', '48575443E8E10B9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '9', '48575443E8E1039D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '13', '48575443E8E10C9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '14', '48575443E8E1189D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '7', '48575443E8E0FE9D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '17', '48575443E8E1319D', 'active', 'online', 'normal', 'match', 'no']['0/', '1/0', '15', '48575443E8E1229D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '0', '48575443E8E0EE9D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '1', '48575443E8E0DD9D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '2', '48575443E8E0F69D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '3', '48575443E8E0C99D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '4', '48575443E8E0EF9D', 'active', 'offline', 'initial', 'initial', 'no']['0/', '2/0', '67', '48575443E8E0C09D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/0', '68', '48575443E8E13E9D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/0', '45', '48575443E8E0BC9D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/0', '46', '48575443E8E0D09D', 'active', 'online', 'normal', 'match', 'no']['0/', '2/1', '5', '48575443E8E0F89D', 'active', 'offline', 'initial', 'initial', 'no']
这不是我们想要的,我想看到的是跟读取的时候一样,没有[],没有'',需要换行。
那么就增加两句,变成这样:
def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表.
file = open(filename,'a')
for i in range(len(data)):
s = str(data[i]).replace('[','').replace(']','')#去除[]
s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符
s = str(data[i])
file.write(s)
file.close()
print("保存文件成功")
file_name = "axtest_savelist.xls"
text_save(file_name,rs)
现在再看文本文件内容,就是我们设想得到的内容了。
2、写入csv文件
import csv
import codecs
def data_write_csv(file_name, datas):#file_name为写入CSV文件的路径,datas为要写入数据列表
file_csv = codecs.open(file_name,'w+','utf-8')
writer = csv.writer(file_csv, delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)
for data in datas:
writer.writerow(data)
print("保存文件成功,处理结束")
file_name = "axtest_savelist.csv"
data_write_csv(file_name, rs)
检查生成的csv文件,写是写进去了,但是每一行都只写进了一个单元格,只有一列数据,也不是我们想要的。
3、写入xls文件
import xlwt
def data_write_xls(table_head, file_path, datas):
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
#将数据写入第 i 行,第 j 列
i = 1
for data in datas:
for j in range(len(data)):
sheet1.write(i,j,data[j])
i = i + 1
f.save(file_path) #保存文件
data_write_xls(table_head,file_name,rs)
OK, 打开表格看一下,列表的内容写入了excel表格的不同列,不错。
恩,等等,没有表头,那么再加上表头:
table_head = ['N1', 'N2', 'N3', 'PON', 'Status1', 'Status2', 'Status3', 'Status4', 'Status5'] #此处是范例,实际操作中可以通过不同方式生成相应的列表
def data_write_xls(table_head, file_name, datas):
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
headlen = len(table_head)
for i in range(headlen):
sheet1.write(0,i,table_head[i])
#将数据写入第 i 行,第 j 列
i = 1
for data in datas:
for j in range(len(data)):
sheet1.write(i,j,data[j])
i = i + 1
f.save(file_name) #保存文件
data_write_xls(table_head,file_name,rs)
搞定收工。