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

Ash*_*shD 8 python filenames ioerror

当尝试使用"open(fname,'w +')"打开新文件时,我得到如下所示的IOError.完整的错误消息如下.

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

我想知道Windows的文件名是否太长,或者我做错了什么.任何提示将不胜感激.非常感谢你.

错误信息:

IOError:[Errno 2]没有这样的文件或目录:'C:\ Documents and Settings\Administrator\op_models\Corp_Network_Nov12\abcde_corporate_nov_12.project\abcde_corporate_nov_12-ctr.rptd.dir\ctr\Weeknights的非营业时间\ hourly_data_for_2_weeks\1294897740\json.data\Link\0\Link Utilization\analyzer393146160-data0.js'

cgo*_*lke 7

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

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

更新:在路径前加上"\\?\".


Evg*_*eev 5

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

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')
        ...
Run Code Online (Sandbox Code Playgroud)

请注意,对我来说,它只能与以下所有内容的组合一起使用:

  1. 在前面添加“\\?\”。

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

  3. 仅使用反斜杠。

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

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