|
| 1 | +""" |
| 2 | +I need the data stored in txt file's format is |
| 3 | + |
| 4 | +date value |
| 5 | +20161010 1.123 |
| 6 | +20161011 1.211 |
| 7 | + |
| 8 | +I get the fund data from internet web resources, and write to txt file daily. |
| 9 | +And I will check the data order to place the latest data in front, and long time ago data in last. |
| 10 | +If the already exist data is ordered, I will only add new data to the file, |
| 11 | +if not, I will add new data and reorder all the data and write into a new file. |
| 12 | + |
| 13 | +""" |
| 14 | + |
| 15 | +def TransDataToDict(file_handle): |
| 16 | + from collections import OrderedDict |
| 17 | + raw_data = OrderedDict() |
| 18 | + line_num = 0 |
| 19 | + for line in file_handle: |
| 20 | + try: |
| 21 | + [key,value] = line.split() |
| 22 | + except ValueError: |
| 23 | + return ("Please check line %0d, the data format may be not correct!" % (line_num)) |
| 24 | + raw_data[int(key)] = ("%.4f" % float(value)) |
| 25 | + line_num = line_num + 1 |
| 26 | + return raw_data |
| 27 | + |
| 28 | +def GetDataFromTxt(txt_str=""): |
| 29 | + raw_data = {} |
| 30 | + try: |
| 31 | + datafile = open(txt_str, "r") |
| 32 | + except FileNotFoundError: |
| 33 | + return ("Oops! the file %s does not exist, Pleade have a check!" % (txt_str)) |
| 34 | + return TransDataToDict(datafile) |
| 35 | + |
| 36 | +def GetIndexToList(ord_dict,index="key"): |
| 37 | + key_list = [] |
| 38 | + for key in ord_dict: |
| 39 | + if index == "key": |
| 40 | + key_list.append(key) |
| 41 | + else: |
| 42 | + key_list.append(ord_dict[key]) |
| 43 | + return key_list |
| 44 | + |
| 45 | +def CompareTwoElements(x,y,order=0): # 0 means left smaller than right, 1 means opposite. |
| 46 | + return x>=y if order else x<=y |
| 47 | + |
| 48 | +def JudgeOrderForArray(array,order=0): # order 0 means small to large, 1 means large to small |
| 49 | + i = 0 |
| 50 | + last_index = len(array)-1 |
| 51 | + while(i<last_index and CompareTwoElements(array[i],array[i+1],order)): |
| 52 | + i = i+1 |
| 53 | + return i==last_index |
| 54 | + |
| 55 | +def OrderedDictReorder(ord_dict,index="key",rev=False): |
| 56 | + from collections import OrderedDict |
| 57 | + return OrderedDict(sorted(ord_dict.items(), key=lambda t:t[0] if index=="key" else t[1],reverse=rev)) |
| 58 | + |
| 59 | + |
| 60 | +if __name__ == "__main__": |
| 61 | + raw_data = GetDataFromTxt("xxx.txt") |
| 62 | + print(raw_data) |
| 63 | + key_list = GetIndexToList(raw_data,"key") |
| 64 | + val_list = GetIndexToList(raw_data,"val") |
| 65 | + print(key_list) |
| 66 | + print(val_list) |
| 67 | + key_order_or_not_s = JudgeOrderForArray(key_list) |
| 68 | + val_order_or_not_s = JudgeOrderForArray(val_list) |
| 69 | + key_order_or_not_l = JudgeOrderForArray(key_list,1) |
| 70 | + val_order_or_not_l = JudgeOrderForArray(val_list,1) |
| 71 | + print(key_order_or_not_s) |
| 72 | + print(val_order_or_not_s) |
| 73 | + print(key_order_or_not_l) |
| 74 | + print(val_order_or_not_l) |
| 75 | + key_ordered_data_s = OrderedDictReorder(raw_data,"key") # raw_data not changed |
| 76 | + key_ordered_data_l = OrderedDictReorder(raw_data,"key",True) |
| 77 | + val_ordered_data_s = OrderedDictReorder(raw_data,"val") |
| 78 | + val_ordered_data_l = OrderedDictReorder(raw_data,"val",True) |
| 79 | + print(key_ordered_data_s) |
| 80 | + print(key_ordered_data_l) |
| 81 | + print(val_ordered_data_s) |
| 82 | + print(val_ordered_data_l) |
| 83 | + |
| 84 | +#order_data = OrderedDict() |
| 85 | +#order_data = OrderedDict(raw_data) |
| 86 | + |
| 87 | +#print(GetDataFromTxt("xxx.txt")) |
| 88 | +#print(GetIndexToList(GetDataFromTxt("xxx.txt"),)) |
| 89 | +#print(GetIndexToList(GetDataFromTxt("xxx.txt"),"val")) |
| 90 | + |
| 91 | +#print(CompareTwoElements(1,1,0)) |
| 92 | +#print(JudgeOrderForArray([4,3,3,2],1)) |
0 commit comments