import csv
import os
class CSV:
def __init__(self, filepath="./", filename="noName.csv"):
self.file = filepath + filename
def store(self, data):
fileIsExist = False
f = None
if self._fileIsExist():
f = open(self.file, mode="a", newline="", encoding="utf-8")
fileIsExist = True
else:
f = open(self.file, mode="w", newline="", encoding="utf-8")
fieldnames = None
if fileIsExist:
fieldnames = self.row(rowIndex=0)
isRows = False
if isinstance(data, dict):
if not fileIsExist:
fieldnames = list(data.keys())
elif isinstance(data, list):
isRows = True
if not fileIsExist:
fieldnames = list(data[0].keys())
else:
raise Exception("寫入的數據必須傳dict或者列表dict")
CSVFile = csv.DictWriter(f, fieldnames)
if not fileIsExist:
CSVFile.writeheader()
if isRows:
CSVFile.writerows(map(lambda i: self._removeKey(fieldnames, i), data))
else:
CSVFile.writerow(self._removeKey(fieldnames, data))
def row(self, rowIndex): # 第一行是0
'''獲取某行數據的列表'''
if not self._fileIsExist():
return []
row = None
with open(self.file, mode="r", encoding="utf-8") as f:
reader = csv.reader(f)
rows = list(reader)
row = rows[rowIndex]
return row
def _fileIsExist(self) -> bool:
return os.path.exists(self.file)
def _removeKey(self, fieldnames: list, data: dict) -> dict:
for k in list(data.keys()):
if k not in fieldnames:
del data[k]
return data
if __name__ == "__main__":
c = CSV()
c.store([{"a":"cccc", "b":"sssssssssss", "c":"333"},{"a":"cccc", "b":"sssssssssss", "c":"333"},{"a":"cccc", "b":"sssssssssss", "c":"333"}])
ysh#True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.