from csv import writer
from os.path import getsize
from pathlib import Path
from platform import system
from typing import TYPE_CHECKING
from .text import BaseTextLogger
if TYPE_CHECKING:
from ..tools import ColorfulConsole
__all__ = ["CSVLogger"]
class CSVLogger(BaseTextLogger):
"""CSV 格式保存数据"""
__type = "csv"
encode = "UTF-8-SIG" if system() == "Windows" else "UTF-8"
def __init__(
self,
root: Path,
title_line: tuple,
field_keys: tuple,
console: "ColorfulConsole",
old=None,
name="Download",
*args,
**kwargs,
):
super().__init__(*args, **kwargs)
self.console = console
self.file = None
self.writer = None
self.name = self._rename(root, self.__type, old, name)
self.path = root.joinpath(f"{self.name}.{self.__type}")
self.title_line = title_line
self.field_keys = field_keys
async def __aenter__(self):
self.file = self.path.open("a", encoding=self.encode, newline="")
self.writer = writer(self.file)
await self.title()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
self.file.close()
async def title(self):
if getsize(self.path) == 0:
await self.save(self.title_line)
async def _save(self, data, *args, **kwargs):
self.writer.writerow(data)