|
26 | 26 |
|
27 | 27 | import numpy as np
|
28 | 28 |
|
| 29 | +import pandas.errors |
29 | 30 | from pandas._libs import lib
|
30 | 31 | from pandas._libs.parsers import STR_NA_VALUES
|
31 | 32 | from pandas.errors import (
|
@@ -709,8 +710,17 @@ def _read(
|
709 | 710 | # Check for duplicates in names.
|
710 | 711 | _validate_names(kwds.get("names", None))
|
711 | 712 |
|
712 |
| - # Create the parser. |
713 |
| - parser = TextFileReader(filepath_or_buffer, **kwds) |
| 713 | + # Check for empty file. |
| 714 | + try: |
| 715 | + # Create the parser. |
| 716 | + parser = TextFileReader(filepath_or_buffer, **kwds) |
| 717 | + except pandas.errors.EmptyDataError: |
| 718 | + if kwds.get("return_empty", False): |
| 719 | + raise |
| 720 | + else: |
| 721 | + print("Empty DataFrame") |
| 722 | + return DataFrame() |
| 723 | + |
714 | 724 |
|
715 | 725 | if chunksize or iterator:
|
716 | 726 | return parser
|
@@ -832,6 +842,7 @@ def read_csv(
|
832 | 842 | float_precision: Literal["high", "legacy", "round_trip"] | None = None,
|
833 | 843 | storage_options: StorageOptions | None = None,
|
834 | 844 | dtype_backend: DtypeBackend | lib.NoDefault = lib.no_default,
|
| 845 | + return_empty: bool = False, |
835 | 846 | ) -> DataFrame | TextFileReader:
|
836 | 847 | # locals() should never be modified
|
837 | 848 | kwds = locals().copy()
|
@@ -968,6 +979,7 @@ def read_table(
|
968 | 979 | float_precision: Literal["high", "legacy", "round_trip"] | None = None,
|
969 | 980 | storage_options: StorageOptions | None = None,
|
970 | 981 | dtype_backend: DtypeBackend | lib.NoDefault = lib.no_default,
|
| 982 | + return_empty: bool = False, |
971 | 983 | ) -> DataFrame | TextFileReader:
|
972 | 984 | # locals() should never be modified
|
973 | 985 | kwds = locals().copy()
|
|
0 commit comments