mirror of https://github.com/jumpserver/jumpserver
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.
29 lines
684 B
29 lines
684 B
# ~*~ coding: utf-8 ~*~
|
|
#
|
|
|
|
import chardet
|
|
import unicodecsv
|
|
|
|
from .base import BaseFileParser
|
|
|
|
|
|
class CSVFileParser(BaseFileParser):
|
|
|
|
media_type = 'text/csv'
|
|
|
|
@staticmethod
|
|
def _universal_newlines(stream):
|
|
"""
|
|
保证在`通用换行模式`下打开文件
|
|
"""
|
|
for line in stream.splitlines():
|
|
yield line
|
|
|
|
def generate_rows(self, stream_data):
|
|
detect_result = chardet.detect(stream_data)
|
|
encoding = detect_result.get("encoding", "utf-8")
|
|
lines = self._universal_newlines(stream_data)
|
|
csv_reader = unicodecsv.reader(lines, encoding=encoding)
|
|
for row in csv_reader:
|
|
yield row
|