【问题标题】:Python plist parser IOError: [Errno 63] File name too long:Python plist 解析器 IOError:[Errno 63] 文件名太长:
【发布时间】:2011-05-25 20:48:24
【问题描述】:

我的 Python plist 解析器不喜欢我的 plist 格式的长字符串。

plist_data = plistlib.readPlist(plistString)

plistString 其实就是我打开的文件的内容。奇怪的是,将输入文件放入 readPlist 函数是可行的,但我必须在 python 中对该文件进行一些进一步的格式化。

我运行上面的代码并在控制台上得到一个IOError: [Errno 63]。不知道如何避免这种情况?我猜该函数正在寻找“原始”输入,而不是字符串。我该如何欺骗它?

【问题讨论】:

    标签: python input plist


    【解决方案1】:

    如果要将字符串作为文件读取,请使用StringIO

    fakeFile= StringIO.StringOI( plistString )
    plist_data = plistlib.readPlist(fakeFile)
    

    最好不要打开读取pList文件。 plistlib.readPlist为你做开场白。

    【讨论】:

    • 哇,我最终做了最复杂的解决方案。我制作了一个临时文件,将我的字符串保存到其中。打开该临时文件并在 plistlib 中读取它
    • @RD。哇,这很糟糕。还。您一开始就不应该阅读 pListString 。只需将文件名提供给plistlib.readPlist()
    • 我这样做的原因是因为 readPlist 忽略了(剥离)了我需要使用的字符串中的一些字符。我读入字符串,将忽略的特殊字符转换为 \escape 字符并将它们读回。
    【解决方案2】:

    plistlib.readPlist 接受文件或文件名,而不是内容。毫不奇怪,您会收到此错误:

    #define ENAMETOOLONG    63      /* File name too long */
    

    尝试plistlib.readPlistFromBytes(data) 或使用 StringIO 将您的字符串呈现为文件

    【讨论】:

    • 哇,我最终做了最复杂的解决方案。我制作了一个临时文件,将我的字符串保存到其中。打开该临时文件并在 plistlib 中读取它
    • plist_data = plistlib.readPlistFromBytes(plistReader) AttributeError: 'module' object has no attribute 'readPlistFromBytes'
    • 看起来 readPlistFromBytes 仅适用于 python3。如果你还在使用 2.x,那么 StringIO 就是这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2015-07-05
    • 2020-04-08
    相关资源
    最近更新 更多