【发布时间】: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