python:IOError:[Errno 36]文件名太长:

时间:2016-06-23 03:36:14

标签: python centos6 tmpfs

我想在tmpfs(CentOS 6.5下)中创建一个文件,如下所示:

fpath = '/tmpfs_mounted/with/long/file/name'
with open(fpath, 'w') as fd:
    write(somedata)
...

但我收到了IOError: [Errno 36] File name too long: ...错误,如何解决?

1 个答案:

答案 0 :(得分:1)

好的,我明白了。 Linux确实具有256字节的基本名称限制,请参阅here以获取所有限制的完整列表。一个简单的代码可以验证:

# -*- encoding:utf8 -*-
import os

if __name__ == '__main__':
    base = 'x'
    basename = ''
    while 1:
        basename += base
        try:
            with open(basename, 'w') as fd:
                os.remove(basename)
        except Exception as ex:
            print('length %d failed' % len(basename))
            break

当我将GBK编码的文件名复制到Tmpfs中时遇到问题,我将GBK文件名转换为UTF8,然后更改了长度:

>>> s = u'中'
>>> len(s.encode('gbk'))
>>> 2
>>> len(s.encode('utf8'))
>>> 3

因此,utf8文件名可能超过255个字节。