forked from SEALiu/PyMemo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
file.py
175 lines (152 loc) · 3.42 KB
/
file.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# -*- coding: utf-8 -*-
import FrameFun
import os
def fetch_statistic(fn):
"""
获取NSR的统计数据
:param fn:
:return:
"""
f = open(fn, 'r')
n = 0
s = 0
r = 0
statistic = {}
for eachLine in f:
if eachLine.strip()[0] == 'N':
n += 1
elif eachLine.strip()[0] == 'S':
s += 1
elif eachLine.strip()[0] == 'R':
r += 1
statistic['N'] = n - 1
statistic['S'] = s - 1
statistic['R'] = r - 1
return statistic
def set_statistic(fn, name, value):
"""
设置NSR的统计数据
:param fn:
:param name:
:param value:
:return:
"""
f1_list = read_rs(fn)
if name == 'N':
f1_list[0] = 'N:' + str(value) + '\n'
elif name == 'S':
f1_list[1] = 'S:' + str(value) + '\n'
elif name == 'R':
f1_list[2] = 'R:' + str(value) + '\n'
f2 = open(fn, 'w+')
f2.writelines(f1_list)
f2.close()
def write_rs(fn, ls, v):
"""
向指定文件中写入待学习内容,并更新NSR统计数据
:param fn:file_name
:param ls:NSR_list
:param v:NSR
:return:
"""
f = open(fn, 'a')
for rows in ls:
f.write('\n')
for item in FrameFun.tuple_add_front(rows, v):
f.write('%s%s' % (item, ' '))
f.close()
set_statistic(fn, v, fetch_statistic(fn)[v])
return True
def read_rs(fn):
f = open(fn)
f_list = f.readlines()
f.close()
return f_list
def is_exist(url, name):
"""
文件name是否存在路径url下
:param url:
:param name:
:return:
"""
dir_ls = os.listdir(url)
return dir_ls.count(name)
def exist_id(fn):
"""
返回fn文件中已经存在的记录的id列表
:param fn: file_name
:return:
"""
exist_ls = []
result_ls = read_rs(fn)
for index, rows in enumerate(result_ls):
if index >= 3:
exist_ls.append(rows[2:10])
return exist_ls
def filter_repeat(fn, ls):
e_id = exist_id(fn)
ls_temp = []
for index, item in enumerate(ls):
if e_id.count(item[0]) != 0:
ls_temp.append(item)
for index in ls_temp:
ls.remove(index)
return ls
def fetch_nsr(fn, nsr):
"""
获取fn中的NSR_list,并分别返回
:param fn: file_name <type str>
:param nsr: N, S, R <type str>
:return:
"""
nsr_list = []
new_ls = []
for items in read_rs(fn):
if items[0] == nsr:
nsr_list.append(items)
ls = nsr_list[1:]
for item in ls:
new_ls.append(tuple(item.split()))
return new_ls
def write_nsr(fn, ls, v):
"""
将结果写入fn文件中
:param fn:
:param nsr:
:return:
"""
f = open(fn, 'a')
for rows in ls:
f.write('\n')
for item in rows:
f.write('%s%s' % (item, ' '))
f.close()
set_statistic(fn, v, fetch_statistic(fn)[v])
def reset_nsr(fn):
"""
重置recordstack_xxx.txt文件
:param fn:
:return:
"""
f = open(fn, 'w')
f.write('N:0\nS:0\nR:0')
f.close()
def no_blank(fn):
"""
清除文件中的空行
:param fn:
:return:
"""
name = fn
f = open(fn, 'r')
f2 = open('no_blank.txt', 'w')
while True:
text = f.readline()
if text == '':
break
elif text == os.linesep:
pass
else:
f2.write(text)
os.remove(fn)
os.rename('no_blank.txt', name)