【问题标题】:Pyhon - Trying to extract files from one location to anotherPython - 试图将文件从一个位置提取到另一个位置
【发布时间】:2018-10-25 09:37:30
【问题描述】:

我正在尝试从服务器中提取一组文件并存储在我本地的一个文件夹中。下面的代码很适合这个任务。但是,如果任何文件为空,它会在该点停止并且不会继续。

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)

引用:

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

【问题讨论】:

  • 你里面为什么有return?大概这是一个函数的一部分,但是你扔掉任何成功的循环,初始化一个空的数据帧并在异常时返回它是没有意义的
  • @roganjosh,谢谢我的错。我修改了与下面Hristiyan建议的代码类似的代码,但仍然抛出相同的错误。

标签: python python-3.x pandas date


【解决方案1】:

您的循环在达到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

【讨论】:

  • 感谢您的回复。我根据您的建议修改了代码,但是当存在空文件时仍然会引发错误
  • 尝试删除df = pd.DataFrame()list_.append(df),只留下continue。它会通过而不是抛出异常,但不会保存空数据帧。
  • 也试过了,但这会引发同样的错误。只是想确认“EmptyDataError”来自“pd.errors.EmptyDataError”库。
  • 能否分享一下traceback?
  • 我已经用引用消息更新了我的初始消息.. Tnx
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2013-05-02
相关资源
最近更新 更多