我正在运行一个使用numpy的python CGI脚本,以从动态创建的CSV读取数据。 Numpy抱怨找不到文件,但文件在那里。从python脚本中,我可以使用system(cat)预先打印文件...
filename is: /tmp/file3aQJRn
Dump file with system(cat)...
A
-257
-1
-136
29567
-97
-8867
-27041
-12323
-17473
-659
Ask numpy to read it...
Traceback (most recent call last):
(some lines deleted, then...)
File "request", line 195, in get_rawcsv_column
col_data = get_csv_column(fname,column)
File "request", line 189, in get_csv_column
all_data = np.genfromtxt(fname,delimiter=",")
File "usr/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1551, in genfromtxt
File "usr/lib/python3.6/site-packages/numpy/lib/_datasource.py", line 151, in open
File "usr/lib/python3.6/site-packages/numpy/lib/_datasource.py", line 501, in open
OSError: "/tmp/file3aQJRn" not found.
然后,我可以在bash提示符下转储文件:
# cat /tmp/file3aQJRn
A
-257
-1
-136
29567
-97
-8867
-27041
-12323
-17473
-659
我可以调用Python(3.6)和numpy来读取文件...
numpy.genfromtxt("/tmp/file3aQJRn",delimiter=",")
array([ nan, -2.57000000e+02, -1.00000000e+00,
-1.36000000e+02, 2.95670000e+04, -9.70000000e+01,
-8.86700000e+03, -2.70410000e+04, -1.23230000e+04,
-1.74730000e+04, -6.59000000e+02])
(nan没问题。它是列标题,随后会从数组中删除它。)
这是怎么回事?临时文件由C ++应用程序使用std :: ofstream从tmpnam()获得临时文件名生成。
答案 0 :(得分:0)
发件人:https://github.com/numpy/numpy/blob/master/numpy/lib/_datasource.py#L610
这似乎是numpy尝试查找文件的位置(尽管您的版本似乎有所不同)。该行之前有一条警告,指出其_findfile(path)
方法将在打开的用于写入的文件上失败。我会确保您的C ++应用程序在尝试读取文件时没有打开该文件。
答案 1 :(得分:0)
这是一个愚蠢的编码错误。给出的文件名numpy实际上带有引号!