【问题标题】:ignore missing files in loop - data did not show up忽略循环中丢失的文件 - 数据未显示
【发布时间】:2020-03-28 00:25:06
【问题描述】:

我有数千个文件,您可以在下面看到年份范围。一些文件的日期丢失了,所以我想跳过它们。但是当我尝试下面的方法并调用data_in时,变量不存在。任何帮助将不胜感激。我是 python 新手。谢谢。

path = r'file path here' 
DataYears = ['2012','2013','2014', '2015','2016','2017','2018','2019', '2020']
Years = np.float64(DataYears)
NumOfYr = Years.size
DataMonths = ['01','02','03','04','05','06','07','08','09','10','11','12']
daysofmonth=[31,28,31,30,31,30,31,31,30,31,30,31]
for yy in range(NumOfYr):
    for mm in range (12):
        try:
            data_in = pd.read_csv(path+DataYears[yy]+DataMonths[mm]+'/*.dat', skiprows=4, header=None, engine='python')
            print('Reached data_in') # EDIT
            a=data_in[0] #EDIT
        except IOError:
            pass
            #print("File not accessible")

编辑:添加错误

Traceback (most recent call last):

  File "Directory/Documents/test.py", line 23, in <module>
    data_in = pd.read_csv(path+'.'+DataYears[yy]+DataMonths[mm]+'/*.cod', skiprows=4, header=None, engine='python')

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 448, in _read
    parser = TextFileReader(fp_or_buf, **kwds)

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 880, in __init__
    self._make_engine(self.engine)

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 1126, in _make_engine
    self._engine = klass(self.f, **self.options)

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/parsers.py", line 2269, in __init__
    memory_map=self.memory_map,

  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/common.py", line 431, in get_handle
    f = open(path_or_buf, mode, errors="replace", newline="")

FileNotFoundError: [Errno 2] No such file or directory: 'Directory/Documents/201201/*.dat'

【问题讨论】:

  • 当您尝试一个不存在的文件时是否会收到错误消息?如果是这样,您能否显示错误和完整的堆栈跟踪。如果您没有收到错误,究竟是什么问题?
  • @ChrisDoyle 我想使用data_in 进行一些计算,但是当我尝试调用a=data_in[0] print(a) 时,我得到:NameError: name 'a' is not defined。我想对每个退出的文件进行计算。
  • 但是你的代码中哪里有a=data_in[0]?在 try 块内?如果是这样,在 try/except 块之后您的行 print(a) 在哪里?如果是这样,那么当您无法使用 pd.read_csv 读取文件时,您将落入 except 块,因此永远不要调用 a=data_in[0] 这意味着如果在 try except 块之后您尝试使用 print(a) 您确实会收到名称错误,因为 @ 987654332@ 从未分配,因为代码在 pd.read_csv 上失败
  • 尝试将打印添加到您的代码中,以帮助您了解正在发生的事情以及是否曾经创建过 data_in。例如,在data_in 下方添加print('Reached data_in'),在pass 之前添加print(IO_Error)。并考虑添加except: print('Some other error occurred') 来捕获不是IOErrors 的错误
  • @Jason 我添加了print('Reached data_in'),我收到了这个错误FileNotFoundError: [Errno 2] No such file or directory: '/Directory/Documents/201201/*.data'。我大部分文件的格式是/Directory/Documents/201201(datehere).dat

标签: python-3.x pandas for-loop


【解决方案1】:

您可以修改以下代码以获取您的日期文件夹列表:

import glob

# Gives you a list of your folders with the different dates
folder_names = glob.glob("Directory/Documents/")
print(folder_names)

然后使用文件夹列表,您可以遍历其中的内容。如果您只想列出所有 .dat 文件,可以执行以下操作:

import glob

# Gives you a list of your folders with the different dates
file_names = glob.glob("Directory/Documents/*/*.dat")
print(file_names)

上面的代码会搜索目录的内容,这样您就可以绕过缺少日期的问题。 prints 在那里,所以你可以看到glob.glob() 的结果。

【讨论】:

  • 如果我每天取平均值并将其绘制为一年中所有日子的时间函数。 glob 会处理丢失的日期吗?
  • @Tina 不,这些是完全不同的任务。首先,您需要找到要读取的文件(glob),然后您需要实际读取文件中的数据(pandas)。读取数据后,根据数据的结构,您可能需要也可能不需要对其进行操作(您可以在其中进行任何插值等)(pandas)。一旦你有了想要绘制的格式的数据,你就可以使用matplotlib 之类的东西来创建你的可视化。
  • 每个模块执行一项特定任务,括号中的模块是建议的,但根据您要执行的任务的具体情况,可能会有更合适的替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多