创建长文件时出现Python IOError异常

尝试使用“open(fname,'w +')”打开新文件时,出现下面显示的IOError。 完整的错误信息如下。

该文件不存在,但我使用“os.access(dir_name,os.W_OK)”和“os.path.exists(dir_name)”验证文件的父目录是否存在。

我想知道如果文件名对于Windows来说太长了,或者我做错了什么。 任何提示将不胜感激。 非常感谢你。

错误信息:

IOError:[Errno 2] No such file or directory:'C: Documents and Settings Administrator op_models Corp_Network_Nov12 abcde_corporate_nov_12.project abcde_corporate_nov_12-ctr.rptd.dir ctr Non Week Hours for Weeknights hourly_data_for_2_weeks 1294897740 json.data Link 0 Link Utilization analyzer393146160-data0.js'


在Windows API中,最大路径长度限制为260个字符。

http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx

更新:在路径前加上“?”。


你可以用这个来修补tarfile模块:

import tarfile

def monkey_patch_tarfile():
    import os
    import sys
    if sys.platform not in ['cygwin', 'win32']:
        return
    def long_open(name, *args, **kwargs):
    # http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#maxpath
        if len(name) >= 200:
            if not os.path.isabs(name):
                name = os.path.join(os.getcwd(), name)
            name = "\?" + os.path.normpath(name)
        return long_open.bltn_open(name, *args, **kwargs)
    long_open.bltn_open = tarfile.bltn_open
    tarfile.bltn_open = long_open

monkey_patch_tarfile()

这里有一些相关的代码适用于我(我有很长的文件名和路径):

for d in os.walk(os.getcwd()):
    dirname = d[0]
    files = d[2]
    for f in files:
        long_fname = u"\?" + os.getcwd() + u"" + dirname + u"" + f
        if op.isdir(long_fname):
            continue
        fin = open(long_fname, 'rb')
        ...

请注意,对我而言,它只适用于以下所有组合:

  • 在前面加上'?'。

  • 使用完整路径,而不是相对路径。

  • 只使用反斜杠。

  • 在Python中,文件名字符串必须是unicode字符串,例如u“abc”,而不是“abc”。

  • 另外请注意,由于某些原因, os.walk(..)将一些目录作为文件返回,所以我上面检查了这个。

    链接地址: http://www.djcxy.com/p/54687.html

    上一篇: Python IOError exception when creating a long file

    下一篇: Using module 'subprocess' with timeout