コード例 #1
0
ファイル: csv.py プロジェクト: BrainPad/cliboa
    def execute(self, *args):
        files = super().get_target_files(self._src_dir, self._src_pattern)
        if len(files) != 1:
            raise Exception("Input file must be only one.")
        self._logger.info("Files found %s" % files)

        # essential parameters check
        valid = EssentialParameters(
            self.__class__.__name__,
            [
                self._before_format,
                self._before_enc,
                self._after_format,
                self._after_enc,
                self._dest_dir,
                self._dest_pattern,
            ],
        )
        valid()

        if self._dest_pattern:
            self._logger.warning(
                "'dest_pattern' will be unavailable in the near future."
                + "Basically every classes which extends FileBaseTransform will be allowed"
                + " plural input files, and output files will be the same name with input"
                + " file names.\n"
                "At that time, if 'dest_dir' is given, transformed files will be created in the given directory.\n" # noqa
                + "If not, original files will be updated by transformed files."
            )

        with open(files[0], mode="rt", encoding=self._before_enc) as i:
            reader = csv.reader(i, delimiter=Csv.delimiter_convert(self._before_format))
            with open(
                os.path.join(self._dest_dir, self._dest_pattern),
                mode="wt",
                newline="",
                encoding=self._after_enc,
            ) as o:
                writer = csv.writer(
                    o,
                    delimiter=Csv.delimiter_convert(self._after_format),
                    quoting=Csv.quote_convert(self._quote),
                    lineterminator=Csv.newline_convert(self._after_nl),
                )
                for line in reader:
                    writer.writerow(line)
コード例 #2
0
ファイル: csv.py プロジェクト: BrainPad/cliboa
    def execute(self, *args):
        # essential parameters check
        valid = EssentialParameters(
            self.__class__.__name__,
            [
                self._before_format,
                self._before_enc,
            ],
        )
        valid()

        files = super().get_target_files(self._src_dir, self._src_pattern)

        if self._after_format is None:
            self._after_format = self._before_format
        if self._after_enc is None:
            self._after_enc = self._before_enc

        for file in files:
            new_file = self._new_file(file)
            with open(file, mode="rt", encoding=self._before_enc) as i:
                reader = csv.reader(
                    i, delimiter=Csv.delimiter_convert(self._before_format)
                )
                with open(
                    new_file, mode="wt", newline="", encoding=self._after_enc
                ) as o:
                    writer = csv.writer(
                        o,
                        delimiter=Csv.delimiter_convert(self._after_format),
                        quoting=Csv.quote_convert(self._quote),
                        lineterminator=Csv.newline_convert(self._after_nl),
                    )

                    for i, line in enumerate(reader):
                        if i == 0:
                            writer.writerow(self._replace_headers(line))
                        else:
                            writer.writerow(line)

            os.remove(file)
            os.rename(new_file, new_file[:-5])