标签:text 函数式 set out 方法 步骤 ble str else
本周使用习惯了函数式编程,这样可以节省不少繁琐的步骤,而且对于程序的条理化非常有益。说来简单就是每个东西写成函数,规定输入输出。
下一周的任务就是面向对象了,把对象这个东西搞清楚,说不定可以重写整个文件为对象的操作
这里说几个本周很经常用的方法,一个是构建字符串数据中的字典数据,实际就是一个列表,这个列表我也是参考了一个tf-idf的文档给出的方法,核心思想就是将每一个字符串填入一个list最后将list写入循环对比,如果碰到一样的跳过,如果遇到不一样的输出,并且把这个字符串同样装入到list中,这样建立一个字典表,实验证明还是很有效果的。目测这是一个经典的算法,只是我不知道而已。
代码如下:
def get_list(path1,path2,full_path):#path1为输入的csv文件,path2是保存的txt文件 csv_file = open(path1) text = open(path2,‘a‘) full_url = open(full_path,‘a‘) csv_reader = csv.reader(csv_file) s = [] for row in csv_reader: for a_ in row: a = replace_http(a_) if row.index(a_) != 0:#对row这个list中的a位置进行判定,为0的则不再计算 full_url.write(a_+‘\n‘) flag = 0 for i in range(len(s)): if a == s[i]: print ‘..........................................................‘ flag = 1 if flag ==0 : s.append(a) if row.index(a_) != 0: text.write(a+‘\n‘) text.close() full_url.close()
其中full_path文件是一个全列表文件,意思是输出所有的字符串,看一看,去重之后的字符串规模和未去重的规模。
对不同的文件进行去重,同样很重要,例如在很多任务中我们经常需要对目标文件建立一个字典,此时的字典文件要求各个条目之间不能重复,这样的情况下我们就需要将两个文件进行去重之后合并(注意:在正常情况下是对一个文件进行去重,对其他文件保留,且最好在去重之后保存的文件顺序与源文件的顺序相同)
下面所示的代码完美解决这一个问题,将一个文件作为主要文件,一个文件作为需要去重的文件,输出为去重之后的文件,具体见代码:
def del_same(path_txt1,path_txt2,out_put): b = open(path_txt2,‘r‘) c = open(out_put,‘a‘) s = set() a = open(path_txt1, ‘r‘) table = open(‘table.txt‘,‘w‘) for line in a.readlines(): c.write(replace_http(line)) c.write(‘\n‘) a.close() a = open(path_txt1, ‘r‘) i = 1 n = 1 for list1 in b.readlines(): list1_re = list1.replace(‘\n‘,‘‘) list1_ok = replace_http(list1_re) a = open(path_txt1, ‘r‘) flag = 0 j = 1 for list2 in a.readlines(): list2_re = list2.replace(‘\n‘,‘‘) list2_ok = replace_http(list2_re) if list1_ok == list2_ok: flag = 1 table.write(str(n) + ‘\n‘) print ‘i =‘+str(n) print ‘j = ‘+str(j) j = j+1 if flag == 1: n = n + 1 i = i+1 continue else: c.write(list1_ok+‘\n‘) n = n + 1 c.close() print ‘dict文件为‘+out_put print str(b) + ‘中有‘+str(i-1)+‘个重复‘
在代码中replace_http是一个我写的删除通用字段的函数。
这个脚本在建立字典时很有用。
标签:text 函数式 set out 方法 步骤 ble str else
原文地址:http://www.cnblogs.com/bybabo/p/7276938.html