现在的工作大部分时间在和数据打交道,最主要的是csv文件和mysql数据库。python自带的csv和mysql-connector用起来总觉得有点罗嗦,不够简洁,于是决定自己写一个包专门处理这些数据。
这个包实现的功能如下:
- 实现类似管道的效果,从数据源获取数据,进行筛选、计算等,向目标写入数据。
- 方便增加中间件,比如筛选的条件,计算的方法等。
在写之前搜索了一下,在github找到一个别人已经实现的库(https://github.com/sandabuliu/python-stream),但这个库是python2的,没有发到pip安装使用并不方便,作者也很久没有维护了,于是读了一下代码,写了我的版本,发到了pypi上。
项目效果:
# 按行读取csv
from file_stream.source import CsvReader
reader = CsvReader('csvfile.csv', delimiter='t', encoding='gbk')
for row in reader:
print(row)
# 写数据到csv
from file_stream.source import Memory
from file_stream.writer import CsvWriter
datas = [{'f_name': 'tom'},
{'f_name': 'tim'},
{'f_name': 'jim'},
{'f_name': 'pim'}, ]
reader = Memory(datas)
p = reader | CsvWriter('csvfile.csv', ['f_name'])
p.output()
# 从csv统计Mode列为1的数据。
from file_stream.source import CsvReader
from file_stream.filter import Filter
def tell_func(row):
#判断的函数
if int(row['Mode']) == 1:
return True
else:
return False
reader = CsvReader(fpath, delimiter=delimiter, encoding=encoding)
filt = Filter(tell_func)
p = reader | filt
codes = set()
for row in p:
codes.add(row)
return codes
# 整合目录下所有的csv文件到一个新文件。
from file_stream.source import Dir, CsvReader
from file_stream.writer import CsvWriter
p = Dir('tmp', ['csv', 'CSV']) | CsvReader() | CsvWriter('output/output.csv', p.fieldnames)
p.output()
目前实现的组件:
- 数据源:文件目录读取所有的文件; csv文件;Mysql数据库。
- 过滤:按函数及函数的组合进行过滤。
- 写数据:向屏幕写数据,向csv写数据,向mysql写数据。
项目还在持续开发中,开发的过程也会在知乎记录,算是自我学习。
欢迎使用和提出建议。
本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/185988.html