Pyhon - пытается извлечь файлы из одного места в другое - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь получить набор файлов с сервера и сохранить их в одной из моих локальных папок.Приведенный ниже код хорошо работает для этой задачи.Однако, если какой-либо из файлов пуст, он останавливается в этой точке и не продолжается дальше.

list_ = []
for file_ in allFiles:
    try:
        df = pd.read_csv(file_, index_col=None, delim_whitespace=True)
        list_.append(df)
        temp = pd.concat(list_)
    except EmptyDataError:
        df = pd.DataFrame()
        return df

Может кто-нибудь посоветовать, как можно обойти эти пустые файлы и продолжить извлекать другие файлы изсервер.Спасибо

Обновление:

Ниже приводится функция, которую я пытаюсь выполнить

list_ = []
for file_ in allFiles:
    try:
        df = pd.read_csv(file_, index_col=None, header=None, delim_whitespace=True)
        list_.append(df)
        temp = pd.concat(list_)
    except pd.errors.EmptyDataError:
        continue
df_v1 = [pd.read_csv(fp, delim_whitespace=True).assign(FileName=os.path.basename(fp)) for fp in allFiles]  <<-- Error thrown on this line as per trackback
df = pd.concat(df_v1, ignore_index=True, sort=False)

Trackback:

Traceback (most recent call last):
  File "/Users/PycharmProjects/venv/try.py", line 102, in <module>
s3_func("stores","store_a", "2018-10-03", "2018-10-05")
  File "/Users/PycharmProjects/venv/try.py", line 86, in s3_func
df_v1 = [pd.read_csv(fp, delim_whitespace=True).assign(FileName=os.path.basename(fp)) for fp in allFiles]
  File "/Users/PycharmProjects/venv/try.py", line 86, in <listcomp>
df_v1 = [pd.read_csv(fp, delim_whitespace=True).assign(FileName=os.path.basename(fp)) for fp in allFiles]
  File "/Users/PycharmProjects/venv/lib/python3.6/site-packages/pandas/io/parsers.py", line 678, in parser_f
return _read(filepath_or_buffer, kwds)
  File "/Users/PycharmProjects/venv/lib/python3.6/site-packages/pandas/io/parsers.py", line 440, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/Users/PycharmProjects/venv/lib/python3.6/site-packages/pandas/io/parsers.py", line 787, in __init__
self._make_engine(self.engine)
  File "/Users/PycharmProjects/venv/lib/python3.6/site-packages/pandas/io/parsers.py", line 1014, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
  File "/Users/PycharmProjects/venv/lib/python3.6/site-packages/pandas/io/parsers.py", line 1708, in __init__
self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 542, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file

1 Ответ

0 голосов
/ 25 октября 2018

Ваш цикл завершается при достижении условия return.Если вы хотите продолжить итерацию, если возникнет исключение, вы можете сделать следующее:

list_ = []
for file_ in allFiles:
    try:
        df = pd.read_csv(file_, index_col=None, delim_whitespace=True)
        list_.append(df)
        temp = pd.concat(list_)
    except EmptyDataError:
        df = pd.DataFrame()
        continue  # Changed return with continue, since return breaks the loop.

Также я вижу, что вы создаете пустой фрейм данных для исключения.Что вы делаете с этим пустым фреймом данных?Вам это нужно для использования в будущем?

Если вам понадобятся пустые фреймы данных в будущем, рассмотрите возможность добавления их в список

except EmptyDataError:
            df = pd.DataFrame()
            list_.append(df)  # Appending empty dataframes to the list
            continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...