1

我有一个非常奇怪的问题,我无法从我的一个较大的脚本中打开文件。

这个问题是间歇性的,我似乎无法理解错误。我收到此错误:

IOError: [Errno 22] invalid mode ('w+') or filename: 'D:\\R4a\\2014_05\\R01359\\R01359_data_dwnhi.dat'

从我的脚本中的这个命令:

with open(os.path.normpath(os.path.join(sonpath,base+'_data_dwnhi.dat')), 'w+') as ff:
   fp = np.memmap(ff, dtype='int16', mode='w+', shape=np.shape(tmp2))

当我使用:

 if os.path.exists(os.path.normpath(os.path.join(sonpath,base+'_data_dwnhi.dat')))== True:
    print os.path.normpath(os.path.join(sonpath,base+'_data_dwnhi.dat')) + ' is a file'

它评估为True。此外,当我在其中单独运行open命令时,ipython它会成功打开文件:

open('D:\\R4a\\2014_05\\R01359\\R01359_data_dwnhi.dat', 'w+')

我不知所措,认为errno 22错误具有误导性。正如我之前所说,问题是间歇性的,并且适用于某些文件。有谁知道我做错了什么?

我正在使用 64 位 Windows 8 机器并从 Anaconda 2.1.0(64 位)发行版运行 python 版本 2.7.8。

4

2 回答 2

0

经过一些试验错误后,指示np.memmap()打开一个不是.__doc__报告mode字符串的文件。

#------------------------------------------------------++++++++ TRY:
#                                                      ||||||||
#                                                      vvvvvvvv
|>>> MM = np.memmap( "temporary_DATA.memmap", mode = 'wNONSENSE+' )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27.anaconda\lib\site-packages\numpy\core\memmap.py", line 208, in __new__
    (valid_filemodes + list(mode_equivalents.keys())))
ValueError: mode must be one of ['r', 'c', 'r+', 'w+', 'readwrite', 'write', 'readonly', 'copyonwrite']
#                                 ^    ^    ^     ^     ^            ^        ^           ^
#                                 |    |    |     |     |            |        |           |
#---------------------------------+----+----+-----+-----+------------+--------+-----------+

最后,此错误 Traceback 显示了未在 中列出的替代字符串,np.memmap.__doc__它们可以正常工作

with open( os.path.normpath( os.path.join( sonpath,
                                           base + '_data_dwnhi.dat'
                                           )
                             ),
           'w+'
           ) as    ff:
   fp = np.memmap( ff, mode  = 'readwrite',      # options listed in np Traceback
                       shape = np.shape( tmp2 ),
                       dtype = 'int16'
                       )

对于鹰派 pythoneers,该帖子有意使用非 PEP-8 源代码格式,因为作者体验到,在学习阶段,代码可读性提高了对任务解决方案的关注,并有助于习惯底层概念而不是花费精力关于正式遵守的排版。希望提供帮助的原则得到尊重,以易于阅读的名义原谅非 PEP-8 样式格式。

于 2015-10-07T08:16:46.957 回答
0

您像普通文件一样打开它,因此出现错误:IOError: [Errno 22] invalid mode. 改为这样做:

with open(path, 'wb') as f:
    pass
于 2015-07-22T21:03:26.130 回答