我有像csv这样的文件中的数据,或者带有特定分隔符的txt文件。例如:
date|Symbol
2017-05-01|A
2017-05-01|B
2017-05-01|C
2017-05-01|A
2017-05-02|A
2017-05-02|B
2017-05-02|C
2017-05-03|A
2017-05-04|A
2017-05-04|B
2017-05-04|C
2017-05-05|A
2017-05-05|A
2017-05-05|B
2017-05-06|C
2017-05-06|A
2017-05-07|A
2017-05-05|B
2017-05-07|C
2017-05-08|A
现在我想检查某个符号是否在某一天重复出现,如果是,那么带有日期的符号。就像符号A在5月1日重复,B在5月5日。
我正在尝试使用python,将所有符号放入列表中,然后在第一列检查,如果有任何日期重复。</ p>
还有其他解决方案吗?
答案 0 :(得分:0)
逐行读取然后按管道分割|:
ln.split("|")[1]
这将显示像A B ......
这样的字符与其他人比较
答案 1 :(得分:0)
使用python difflib https://pymotw.com/2/difflib/
import difflib
from difflib_data import *
d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
print '\n'.join(diff)
答案 2 :(得分:0)
我创建了一个词典列表,每个词典都有键作为数据,列2列表作为值。现在我检查了每一本字典是否有任何重复。
如果任何人有更好的解决方案,那么非常欢迎。
更新上述实施代码:
with open(file_path,"rb") as f:
reader = csv.reader(f,delimiter=delmtr)
for line in reader:
if is_header == 1:
is_header = 0
continue
date_dict = {}
inst_fl_col = inst_col - 1
date_fl_col = date_col - 1
if line[date_fl_col] not in date_list:
date_list.append(line[date_fl_col])
instrument_list = []
instrument_list.append(line[inst_fl_col])
date_dict[line[date_fl_col]] = instrument_list
p_list.append(date_dict)
csvwriter.writerow(line)
del date_dict,instrument_list
else:
for dicts in p_list:
for k,v in dicts.items():
if k == line[date_fl_col]:
if line[inst_fl_col] not in v:
v.append(line[inst_fl_col])
csvwriter.writerow(line)
else:
count += 1
nw_fl.close()
print str(count)+" rows ignored in newly created "+new_file_name+" file"
del date_list[:],is_header,csvwriter,count
我是通过使用python的基本知识来实现的,现在我正在使用collections模块和defaultdict类来改进它。如果有人要求改进代码,请告诉我。
非常欢迎建议。