直接上code,供我以后参考,两个小部分
# 打开文件,默认为"读文件"
def open_file(filename, mode='r'):
return open(filename, mode, encoding='utf-8', errors='ignore')
# 读入数据,默认分割符为','
def read_file(filename, splitchar=','):
all_datas = []
with open_file(filename) as f:
for line in f:
data = line.strip().split(splitchar)
if data:
all_datas.append(data)
return all_datas
"""
find_datas:
从DatasMsg.csv中提取与“打架”相关的数据行
每列均由','隔开
源文件中列号6标注了每行数据的类型,通过对列6的判断,抽取文件。
extra_datas1:
从XxzsInfo.csv中提取与“打架”类型相关的列
每列均由','隔开
# 提取"打架"中类型内容,列号分别为0, -10,-7, -2
extra_datas2:
抽取KeyInfo.csv的子集,要求为
每行Info'发生原因'或'行为特征'不为空值
calculate_type1:
计算'打架'的类型,以及每种类型的对应的个数
"""
from commons import open_file
from commons import read_file
import ast
# 找到"打架"的数据(一行一行匹配),生成新文件
def find_datas(infilepath, outfilepath, strinfo):
JQdatas = read_file(infilepath)
temp = ''
# 按行处理
for i in range(0, len(JQdatas)):
if JQdatas[i][6] == strinfo or i == 0:
for j in range(0, len(JQdatas[i])):
temp = temp + str(JQdatas[i][j]) + ','
temp = temp + '\n'
open_file(outfilepath, mode='w').write(temp)
"""
抽取"打架"文件中我需要的那几列,生成新文件
# 注意的是,由于文件中','不是只做分割符用,中间有1列混用了','
# 所以用','分割后,每行的列数其实是不等的。
# 所幸的是,从最后一列算的话,可以抽取到我要的那几列,所以采取了负值索引
"""
def extra_datas1(infilepath, outfilepath, a=0, b=-10, c=-7):
Xxzsdatas = read_file(infilepath)
temp = ''
for i in range(0, len(Xxzsdatas)):
temp = temp + Xxzsdatas[i][a] + ',' + Xxzsdatas[i][b] + ',' + Xxzsdatas[i][c] + ',' + Xxzsdatas[i][-2] + '\n'
open_file(outfilepath, mode='w').write(temp)
# 即便抽取了我要的几列,有些行某些列值为空,我也不要这些列,再抽一次,生成新文件
def extra_datas2(infilepath, outfilepath):
KeyInfo = read_file(infilepath)
temp = ''
# 按行处理
for i in range(0, len(KeyInfo)):
if KeyInfo[i][1] != '' or KeyInfo[i][2] != '' or i == 0:
for j in range(0, len(KeyInfo[i])):
temp = temp + str(KeyInfo[i][j]) + ','
temp = temp + '\n'
open_file(outfilepath, mode='w').write(temp)
# 把我最后得到的文件变成字典,做一些统计分析(比如统计类型type的个数)
# 最终字典形如{type1:value1,...}
def calculate_type1(infilepath):
data = read_file(infilepath)
tempset = set()
for i in range(1, len(data)):
tempset.add(data[i][1])
# 这里复制_的结果再转为str,最后把str转为dict是因为fromkeys创建的字典,字典值会同步更新,所以多走了一步
_ = dict.fromkeys(list(tempset), 0)
type = ast.literal_eval(str(_))
for i in range(1, len(data)):
type[data[i][1]] += 1
return type, data
find_datas('DatasMsg.csv', 'XxzsInfo.csv', '打架')
extra_datas1('XxzsInfo.csv', 'KeyInfo.csv')
extra_datas2('KeyInfo.csv', 'Sub_KeyInfo.csv')
types, datas = calculate_type1('Sub_KeyInfo.csv')
print(' {0} 条类型非空的打架数据中,共有 {1} 种类型的警情:。\n 对应的字典为:\n{2}'.format(len(datas), len(types), types))
# print(types.keys())
# print(types.values())
# print(types.items())
原始数据(DatasMsg.csv)样式
列名1,列名2,列名3,列名4,列名5,....
value1,value2,value3,value4,value5,....