我有一个非常奇怪的问题,我无法从我的一个较大的脚本中打开文件。
这个问题是间歇性的,我似乎无法理解错误。 我收到了这个错误:
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。
答案 0 :(得分:0)
您将其打开为普通文件,因此错误:IOError: [Errno 22] invalid mode
。这样做:
with open(path, 'wb') as f:
pass
答案 1 :(得分:0)
在发生一些试验错误后,请指示 np.memmap()
打开包含.__doc__
报告的 mode
字符串以外的文件。< / p>
#------------------------------------------------------++++++++ 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样式格式以易于阅读的名义被宽恕。