pfm & tools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.5 KiB

# -*- coding: utf-8 -*-
import io
class CSVHandler:
parse given csv
def __init__(self, path):
:param path: path to file
self.file =, "r", encoding="cp1251").read().split("\n")
self.headers = ['date', 'sum', 'category']
def get_row(self, row):
""" Get row with given index
:param row:
return self.file[row]
def check_row(self, row_index, **kwargs):
""" Check that row has given values
:param row_index:
:param kwargs:
:return: True if values coincides else False
i = self.get_row(row_index).split(";")
for key, val in kwargs.items():
index = self.headers.index(key)
if i[index] != val:
return False
return True
def find_row(self, value=None, **kwargs):
""" Find row index of row containing given values
:param kwargs:
:return: index of row if it is found, else None
if value is not None:
return 0
for i in range(len(self.file)-1):
if self.check_row(i, **kwargs):
return i
def get_row_data(self, value=None, **kwargs):
""" Find row containing given values and take dict with all values that it has
:param kwargs:
row = self.find_row(value, **kwargs)
data = self.file[row].split(";")
return dict(zip(self.headers, data))