convert-stream 2.3.8__tar.gz → 2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. {convert_stream-2.3.8 → convert_stream-2.4}/PKG-INFO +1 -1
  2. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/__init__.py +4 -3
  3. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/image/img_object.py +1 -1
  4. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/mod_types/__init__.py +2 -4
  5. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/mod_types/table_types.py +121 -102
  6. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/pdf/pdf_document.py +14 -10
  7. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/pdf/pdf_page.py +5 -3
  8. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/text/__init__.py +4 -4
  9. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/text/date.py +39 -2
  10. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream.egg-info/PKG-INFO +1 -1
  11. {convert_stream-2.3.8 → convert_stream-2.4}/pyproject.toml +1 -1
  12. {convert_stream-2.3.8 → convert_stream-2.4}/README.md +0 -0
  13. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/__main__.py +0 -0
  14. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/_version.py +0 -0
  15. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/doc_stream.py +0 -0
  16. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/image/__init__.py +0 -0
  17. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/mod_types/enums.py +0 -0
  18. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/mod_types/modules.py +0 -0
  19. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/pdf/__init__.py +0 -0
  20. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/pdf/image_to_pdf.py +0 -0
  21. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/pdf/pdf_to_image.py +0 -0
  22. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/sheets/__init__.py +0 -0
  23. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/sheets/load.py +0 -0
  24. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/sheets/parse.py +0 -0
  25. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/sheets/save.py +0 -0
  26. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/table_files.py +0 -0
  27. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/text/find_text.py +0 -0
  28. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream/text/terminal.py +0 -0
  29. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream.egg-info/SOURCES.txt +0 -0
  30. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream.egg-info/dependency_links.txt +0 -0
  31. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream.egg-info/requires.txt +0 -0
  32. {convert_stream-2.3.8 → convert_stream-2.4}/convert_stream.egg-info/top_level.txt +0 -0
  33. {convert_stream-2.3.8 → convert_stream-2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.3.8
3
+ Version: 2.4
4
4
  Summary: Manipulação de documentos PDF e Imagens. Converter, Ler, rotacionar exportar etc.
5
5
  Author: Bruno Chaves
6
6
  Requires-Python: >=3.11
@@ -10,13 +10,14 @@ from ._version import (
10
10
  from .mod_types import (
11
11
  MetaDataFile, MetaDataItem, create_metadata, ColumnsTable, ListString, ArrayString,
12
12
  HeadCell, HeadValues, ColumnBody, TextTable, LibDate, LibPDF, LibImage, LibPdfToImage,
13
- LibImageToPdf, create_dict_map_from_file, create_void_dict_map, RotationAngle
13
+ LibImageToPdf, DictTextTable, RotationAngle,
14
14
  )
15
15
  from .image import ImageObject, CollectionImages
16
16
  from .pdf import DocumentPdf, PageDocumentPdf, CollectionPagePdf, ConvertPdfToImages, ConvertImageToPdf
17
17
  from .pdf.pdf_document import SearchableTextPdf
18
18
  from .doc_stream import PdfStream, SplitPdf
19
19
  from .table_files import PdfFinder
20
+ from .text import ConvertStringDate, fmt_col_to_date
20
21
 
21
22
 
22
23
  def __create_stream() -> PdfStream:
@@ -79,7 +80,7 @@ __all__ = [
79
80
  'PdfFinder', 'SplitPdf', 'LibImageToPdf', 'RotationAngle', 'ConvertImageToPdf', 'ConvertPdfToImages',
80
81
  'MetaDataFile', 'MetaDataItem', 'ColumnsTable', 'ListString', 'ArrayString',
81
82
  'HeadCell', 'HeadValues', 'ColumnBody', 'TextTable', 'LibDate', 'LibPDF', 'LibImage', 'LibPdfToImage',
82
- 'read_pdf', 'read_files_pdf', 'read_image', 'create_dict_map_from_file', 'create_void_dict_map',
83
- 'create_metadata',
83
+ 'read_pdf', 'read_files_pdf', 'read_image', 'DictTextTable',
84
+ 'create_metadata', 'fmt_col_to_date',
84
85
  ]
85
86
 
@@ -508,7 +508,7 @@ class CollectionImages(ListItems):
508
508
  self.__count: int = 0
509
509
 
510
510
  def clear(self) -> None:
511
- self.clear()
511
+ super().clear()
512
512
  self.__count = 0
513
513
 
514
514
  def add_image(self, image: ImageObject) -> None:
@@ -10,8 +10,7 @@ from .enums import (
10
10
 
11
11
  from .table_types import (
12
12
  TextTable, ListString, ArrayString, HeadCell, HeadValues,
13
- ColumnBody, create_void_dict_map, create_dict_map_values, create_void_df_map,
14
- create_dict_map_from_file, concat_maps, contains, get_text_from_file
13
+ ColumnBody, DictTextTable, concat_maps, contains,
15
14
  )
16
15
 
17
16
 
@@ -92,8 +91,7 @@ def create_metadata(file: str | File) -> MetaDataFile:
92
91
 
93
92
  __all__ = [
94
93
  'get_hash_from_bytes', 'get_void_metadata', 'get_void_metadata', 'contains',
95
- 'concat_maps', 'create_dict_map_from_file', 'create_dict_map_values',
96
- 'create_void_df_map', 'create_void_dict_map', 'ColumnBody', 'ColumnsTable',
94
+ 'concat_maps', 'DictTextTable', 'ColumnBody', 'ColumnsTable',
97
95
  'ListString', 'HeadCell', 'HeadValues', 'TextTable', 'RotationAngle', 'LibPDF',
98
96
  'LibImageToPdf', 'LibPdfToImage', 'LibImage', 'LibDate', 'ArrayString',
99
97
  'MetaDataFile', 'MetaDataItem', 'create_metadata',
@@ -292,110 +292,129 @@ class TextTable(dict):
292
292
  self[col.col_name] = col
293
293
 
294
294
 
295
- def create_void_dict_map() -> dict[str, ColumnBody]:
296
-
297
- return {
298
- ColumnsTable.KEY.value: ColumnBody(ColumnsTable.KEY.value, ListString([])),
299
- ColumnsTable.NUM_PAGE.value: ColumnBody(ColumnsTable.NUM_PAGE.value, ListString([])),
300
- ColumnsTable.NUM_LINE.value: ColumnBody(ColumnsTable.NUM_LINE.value, ListString([])),
301
- ColumnsTable.TEXT.value: ColumnBody(ColumnsTable.TEXT.value, ListString([])),
302
- ColumnsTable.FILE_NAME.value: ColumnBody(ColumnsTable.FILE_NAME.value, ListString([])),
303
- ColumnsTable.FILETYPE.value: ColumnBody(ColumnsTable.FILETYPE.value, ListString([])),
304
- ColumnsTable.FILE_PATH.value: ColumnBody(ColumnsTable.FILE_PATH.value, ListString([])),
305
- ColumnsTable.DIR.value: ColumnBody(ColumnsTable.DIR.value, ListString([])),
306
- }
307
-
308
-
309
- def create_void_df_map() -> pd.DataFrame:
310
- """
311
- Retorna um DataFrame() vazio, apenas com as colunas formatadas
312
- para tabela de arquivos.
313
- @rtype: pd.DataFrame
314
- """
315
- return pd.DataFrame.from_dict(create_void_dict_map())
316
-
317
-
318
- def create_dict_map_values(
319
- values: list[str], *,
320
- page_num: str = 'nan',
321
- file_path: str = 'nan',
322
- dir_path: str = 'nan',
323
- file_type: str = 'nan',
324
- ) -> dict[str, ColumnBody]:
325
- """
326
- Criar um DataFrame() a partir do mapa de um texto list[str]
327
- :param values: texto list[str]
328
- :param page_num: numero da página PDF caso o texto seja de uma página PDF.
329
- :param file_path: path do arquivo.
330
- :param dir_path: diretório pai do arquivo.
331
- :param file_type: tipo do arquivo.
332
- :return: DataFrame
333
- @rtype: pd.DataFrame
334
- """
335
- max_num = len(values)
336
- if max_num < 1:
337
- return create_void_dict_map()
338
-
339
- _map: dict[str, ColumnBody] = create_void_dict_map()
340
- _map[ColumnsTable.KEY.value].extend([f'{x}' for x in range(0, max_num)])
341
- _map[ColumnsTable.NUM_PAGE.value].extend([page_num] * max_num)
342
- _map[ColumnsTable.NUM_LINE.value].extend([f'{x+1}' for x in range(0, max_num)])
343
- _map[ColumnsTable.TEXT.value].extend(values)
344
- _map[ColumnsTable.FILE_NAME.value].extend([os.path.basename(file_path)] * max_num)
345
- _map[ColumnsTable.FILETYPE.value].extend([file_type] * max_num)
346
- _map[ColumnsTable.FILE_PATH.value].extend([file_path] * max_num)
347
- _map[ColumnsTable.DIR.value].extend([dir_path] * max_num)
348
- return _map
349
-
350
-
351
- def create_dict_map_from_file(
352
- file: File,
353
- values: list[str], *,
354
- page_num: str = 'nan'
355
- ) -> dict[str, ColumnBody]:
356
- """
357
- Criar um DataFrame() a partir do mapa de um texto list[str]
358
- :param file: arquivo no disco do qual o texto (list[str]) foi extraído
359
- :param values: texto list[str]
360
- :param page_num: numero da página PDF caso o texto seja de uma página PDF.
361
-
362
- """
363
- max_num = len(values)
364
- if max_num < 1:
365
- return create_void_dict_map()
366
- return create_dict_map_values(
367
- values, page_num=page_num, file_path=file.absolute(), dir_path=file.dirname(), file_type=file.extension()
368
- )
295
+ class DictTextTable(TextTable):
296
+
297
+ default_columns = [
298
+ ColumnBody(ColumnsTable.KEY.value, ListString([])),
299
+ ColumnBody(ColumnsTable.NUM_PAGE.value, ListString([])),
300
+ ColumnBody(ColumnsTable.NUM_LINE.value, ListString([])),
301
+ ColumnBody(ColumnsTable.TEXT.value, ListString([])),
302
+ ColumnBody(ColumnsTable.FILE_NAME.value, ListString([])),
303
+ ColumnBody(ColumnsTable.FILETYPE.value, ListString([])),
304
+ ColumnBody(ColumnsTable.FILE_PATH.value, ListString([])),
305
+ ColumnBody(ColumnsTable.DIR.value, ListString([])),
306
+ ]
369
307
 
308
+ def __init__(self, body_list: list[ColumnBody]):
309
+ super().__init__(body_list)
370
310
 
371
- def get_text_from_file(file: str | File) -> ListString:
372
- """
373
- Retorna o texto de um arquivo .txt em formato de lista
374
- """
375
- if isinstance(file, File):
376
- file = file.absolute()
377
-
378
- try:
379
- with open(file, 'rt') as f:
380
- lines = ListString(f.readlines())
381
- except Exception as e:
382
- print(e)
383
- return ListString([])
384
- else:
385
- return lines
386
-
387
-
388
- def concat_maps(list_map: list[dict[str, ColumnBody]]) -> dict[str, ColumnBody]:
389
- if len(list_map) == 0:
390
- return {}
391
- columns: list[str] = list(list_map[0].keys())
392
- final_dict: dict[str, ColumnBody] = {}
393
- for col in columns:
394
- final_dict[col] = ColumnBody(col, [])
395
- for current_map in list_map:
396
- for c in columns:
397
- final_dict[c].extend(current_map[c])
398
- return final_dict
311
+ @property
312
+ def columns(self) -> HeadValues:
313
+ _cols = list(self.keys())
314
+ return HeadValues([HeadCell(x) for x in _cols])
315
+
316
+ def to_data(self) -> pd.DataFrame:
317
+ return pd.DataFrame.from_dict(self)
318
+
319
+ @classmethod
320
+ def create_void_dict(cls) -> DictTextTable:
321
+
322
+ _default = [
323
+ ColumnBody(ColumnsTable.KEY.value, ListString([])),
324
+ ColumnBody(ColumnsTable.NUM_PAGE.value, ListString([])),
325
+ ColumnBody(ColumnsTable.NUM_LINE.value, ListString([])),
326
+ ColumnBody(ColumnsTable.TEXT.value, ListString([])),
327
+ ColumnBody(ColumnsTable.FILE_NAME.value, ListString([])),
328
+ ColumnBody(ColumnsTable.FILETYPE.value, ListString([])),
329
+ ColumnBody(ColumnsTable.FILE_PATH.value, ListString([])),
330
+ ColumnBody(ColumnsTable.DIR.value, ListString([])),
331
+ ]
332
+ return cls(_default)
333
+
334
+ @classmethod
335
+ def create_void_df(cls) -> pd.DataFrame:
336
+ return pd.DataFrame.from_dict(cls.create_void_dict())
337
+
338
+ @classmethod
339
+ def create_from_values(
340
+ cls,
341
+ values: list[str], *,
342
+ page_num: str = 'nan',
343
+ file_path: str = 'nan',
344
+ dir_path: str = 'nan',
345
+ file_type: str = 'nan',
346
+ ) -> DictTextTable:
347
+ max_num = len(values)
348
+ if max_num < 1:
349
+ return cls.create_void_dict()
350
+
351
+ _items = [
352
+ ColumnBody(
353
+ ColumnsTable.KEY.value, ListString([f'{x}' for x in range(0, max_num)])
354
+ ),
355
+ ColumnBody(
356
+ ColumnsTable.NUM_PAGE.value, ListString([page_num] * max_num)
357
+ ),
358
+ ColumnBody(
359
+ ColumnsTable.NUM_LINE.value, ListString([f'{x+1}' for x in range(0, max_num)])
360
+ ),
361
+ ColumnBody(
362
+ ColumnsTable.TEXT.value, ListString(values)
363
+ ),
364
+ ColumnBody(
365
+ ColumnsTable.FILE_NAME.value, ListString([os.path.basename(file_path)] * max_num)
366
+ ),
367
+ ColumnBody(
368
+ ColumnsTable.FILETYPE.value, ListString([file_type] * max_num)
369
+ ),
370
+ ColumnBody(
371
+ ColumnsTable.FILE_PATH.value, ListString([file_path] * max_num)
372
+ ),
373
+ ColumnBody(
374
+ ColumnsTable.DIR.value, ListString([dir_path] * max_num)
375
+ ),
376
+ ]
377
+ return cls(_items)
378
+
379
+ @classmethod
380
+ def create_from_file_text(cls, file: File) -> DictTextTable:
381
+ if not isinstance(file, File):
382
+ return cls.create_void_dict()
383
+
384
+ try:
385
+ with open(file.absolute(), 'rt') as f:
386
+ lines = ListString(f.readlines())
387
+ except Exception as e:
388
+ print(e)
389
+ return cls.create_void_dict()
390
+ else:
391
+ return cls.create_from_values(
392
+ lines,
393
+ file_type=file.extension(),
394
+ file_path=file.absolute(),
395
+ dir_path=file.dirname(),
396
+ )
397
+
398
+
399
+ def concat_maps(list_map: list[DictTextTable]) -> DictTextTable:
400
+ if len(list_map) < 1:
401
+ return DictTextTable.create_void_dict()
402
+ _columns: HeadValues = list_map[0].columns
403
+ list_values: list[ColumnBody] = []
404
+ text_table: DictTextTable
405
+ col: ColumnBody
406
+ i: HeadCell
407
+
408
+ for i in _columns:
409
+ list_values.append(
410
+ ColumnBody(i, ListString([]))
411
+ )
412
+ for text_table in list_map:
413
+ for col in list_values:
414
+ col.extend(
415
+ text_table[col.col_name]
416
+ )
417
+ return DictTextTable(list_values)
399
418
 
400
419
 
401
420
 
@@ -13,7 +13,7 @@ from convert_stream.mod_types import (
13
13
  get_hash_from_bytes, create_metadata, MetaDataFile, MetaDataItem
14
14
  )
15
15
  from convert_stream.mod_types.table_types import (
16
- ListItems, create_dict_map_values, concat_maps, create_void_dict_map, ColumnBody,
16
+ ListItems, concat_maps, DictTextTable, ColumnBody,
17
17
  HeadCell, HeadValues, ColumnsTable
18
18
  )
19
19
  from convert_stream.mod_types.enums import LibPDF
@@ -42,7 +42,7 @@ class SearchableTextPdf(object):
42
42
  """
43
43
  def __init__(self, silent: bool = False):
44
44
  self.silent = silent
45
- self.elements: dict[str, ColumnBody] = create_void_dict_map()
45
+ self.elements: dict[str, ColumnBody] = DictTextTable.create_void_dict()
46
46
 
47
47
  def __repr__(self):
48
48
  return f'SearchableTextPdf: {self.elements}'
@@ -533,7 +533,7 @@ class DocumentPdf(object):
533
533
  show_warning(f'{e}')
534
534
  return _values
535
535
 
536
- def _create_map(self, page: PageDocumentPdf, *, separator: str = '\n') -> dict[str, ColumnBody]:
536
+ def _create_map(self, page: PageDocumentPdf, *, separator: str = '\n') -> DictTextTable:
537
537
  """
538
538
  @rtype: pd.DataFrame
539
539
  """
@@ -544,11 +544,15 @@ class DocumentPdf(object):
544
544
  _values = txt_page.split(separator)
545
545
 
546
546
  if not self.metadata.file_path.is_empty:
547
- return create_dict_map_values(
548
- _values, page_num=f'{page.number_page}', file_type='.pdf',
547
+ return DictTextTable.create_from_values(
548
+ _values,
549
+ page_num=f'{page.number_page}',
550
+ file_type='.pdf',
551
+ file_path=self.metadata.file_path,
552
+ dir_path=self.metadata.dir_path,
549
553
  )
550
554
  else:
551
- return create_dict_map_values(
555
+ return DictTextTable.create_from_values(
552
556
  _values,
553
557
  page_num=f'{page.number_page}',
554
558
  file_type='.pdf',
@@ -556,15 +560,15 @@ class DocumentPdf(object):
556
560
  dir_path=self.metadata.dir_path,
557
561
  )
558
562
 
559
- def to_dict(self, separator: str = '\n') -> dict[str, ColumnBody]:
560
- list_data: list[dict[str, ColumnBody]] = []
563
+ def to_dict(self, separator: str = '\n') -> DictTextTable:
564
+ list_data: list[DictTextTable] = []
561
565
  pages: list[PageDocumentPdf] = self.to_pages()
562
566
 
563
567
  for page_pdf in pages:
564
- _mp: dict[str, ColumnBody] = self._create_map(page_pdf, separator=separator)
568
+ _mp: DictTextTable = self._create_map(page_pdf, separator=separator)
565
569
  list_data.append(_mp)
566
570
  if len(list_data) == 0:
567
- return create_void_dict_map()
571
+ return DictTextTable.create_void_dict()
568
572
  return concat_maps(list_data)
569
573
 
570
574
  def to_data(self, separator: str = '\n') -> pd.DataFrame:
@@ -9,7 +9,7 @@ import pandas as pd
9
9
 
10
10
  from convert_stream.mod_types.enums import LibPDF
11
11
  from convert_stream.mod_types.table_types import (
12
- create_dict_map_values, ListString, ColumnBody
12
+ DictTextTable, ListString, ColumnBody
13
13
  )
14
14
  from convert_stream.mod_types.modules import (
15
15
  ModPagePdf, PageObject, fitz
@@ -230,9 +230,11 @@ class PageDocumentPdf(object):
230
230
  return ListString([])
231
231
  return ListString(txt.split(separator))
232
232
 
233
- def to_dict(self, separator: str = '\n') -> dict[str, ColumnBody]:
233
+ def to_dict(self, separator: str = '\n') -> DictTextTable:
234
234
  _values = self.to_list(separator)
235
- return create_dict_map_values(_values, page_num=f'{self.number_page}', file_type='.pdf')
235
+ return DictTextTable.create_from_values(
236
+ _values, page_num=f'{self.number_page}', file_type='.pdf'
237
+ )
236
238
 
237
239
  def to_map(self, separator: str = '\n') -> pd.DataFrame:
238
240
  return pd.DataFrame.from_dict(self.to_dict(separator=separator)).astype('str')
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env python3
2
- from .date import ConvertStringDate
3
- from .find_text import ArrayString, FindText
2
+ from .date import ConvertStringDate, fmt_col_to_date
3
+ from .find_text import FindText
4
4
  from .terminal import (
5
5
  print_line, print_title, show_error, show_warning, show_info, Colors, msg
6
6
  )
7
7
 
8
8
  __all__ = [
9
- 'ConvertStringDate', 'print_title', 'print_line',
9
+ 'ConvertStringDate', 'print_title', 'print_line', 'fmt_col_to_date',
10
10
  'show_info', 'Colors', 'show_error', 'show_warning', 'FindText',
11
- ]
11
+ ]
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  from __future__ import annotations
3
3
  from datetime import datetime
4
- from pandas import Timestamp
4
+ import pandas as pd
5
5
  from convert_stream.mod_types.enums import LibDate
6
6
 
7
7
 
@@ -112,7 +112,7 @@ class ConvertStringDate(object):
112
112
  """
113
113
  Verifica se o objeto atual é timestamp
114
114
  """
115
- if isinstance(d, Timestamp):
115
+ if isinstance(d, pd.Timestamp):
116
116
  return True
117
117
  for current_format in self.date_valid_times_tamp:
118
118
  try:
@@ -214,3 +214,40 @@ class ConvertStringDate(object):
214
214
  return date_timestamp.strftime(fmt.value)
215
215
  return None
216
216
 
217
+
218
+ def fmt_col_to_date(
219
+ df: pd.DataFrame,
220
+ nome_coluna: str, *,
221
+ date_fmt: LibDate = LibDate.DMY
222
+ ) -> pd.DataFrame:
223
+ """
224
+ Formata uma coluna específica de um DataFrame como data, preservando valores que não puderem ser convertidos.
225
+
226
+ Parâmetros:
227
+ df (pd.DataFrame): DataFrame de entrada.
228
+ nome_coluna (str): Nome da coluna a ser formatada.
229
+ formato (str): Tipo de formatação de data. Pode ser:
230
+ - "dia/mes/ano" → "%d/%m/%Y"
231
+ - "mes/dia/ano" → "%m/%d/%Y"
232
+ - "ano-mes-dia" → "%Y-%m-%d"
233
+ - ou um formato customizado válido do datetime.
234
+
235
+ Retorna:
236
+ pd.DataFrame: O mesmo DataFrame, com a coluna formatada.
237
+ """
238
+ # Copia o DataFrame para não modificar o original
239
+ df_resultado = df.copy().astype('str')
240
+
241
+ def try_converter(valor) -> str:
242
+ """Tenta converter o valor para data, preservando o original se falhar."""
243
+ try:
244
+ _new = ConvertStringDate().convert_date(valor, fmt=date_fmt)
245
+ except Exception as e:
246
+ return valor
247
+ else:
248
+ if _new is not None:
249
+ return _new
250
+ return valor
251
+
252
+ df_resultado[nome_coluna] = df_resultado[nome_coluna].apply(try_converter)
253
+ return df_resultado
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.3.8
3
+ Version: 2.4
4
4
  Summary: Manipulação de documentos PDF e Imagens. Converter, Ler, rotacionar exportar etc.
5
5
  Author: Bruno Chaves
6
6
  Requires-Python: >=3.11
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "convert_stream"
7
- version = "2.3.8"
7
+ version = "2.4"
8
8
  authors = [
9
9
  { name="Bruno Chaves"},
10
10
  ]
File without changes
File without changes