python - lxml + 文件负载 = 随机序列化错误 : IO_WRITE

标签 python python-3.x xml-parsing lxml elementtree

我正在使用 lxml 和 python 3 来解析许多文件并合并属于在一起的文件。 这些文件实际上成对地存储在 zip 文件中(也首先合并),但我认为这在这里并不重要。

我们讨论的是 100k 个文件,压缩后大小约为 900MB。

我的问题是我的脚本工作正常,但在某些时候(对于多次运行,它并不总是相同的点,所以它不应该是某个文件的问题)我收到此错误:

File "C:\Users\xxx\workspace\xxx\src\zip2xml.py", line 110, in _writetonorm normroot.getroottree().write(norm_file_path) File "lxml.etree.pyx", line 1866, in lxml.etree._ElementTree.write (src/lxml\lxml.etree.c:46006) File "serializer.pxi", line 481, in lxml.etree._tofilelike (src/lxml\lxml.etree.c:93719) File "serializer.pxi", line 187, in lxml.etree._raiseSerialisationError (src/lxml\lxml.etree.c:90965) lxml.etree.SerialisationError: IO_WRITE

我不知道是什么原因导致了这个错误。 整个代码有点麻烦,所以我希望相关区域足够了:

def _writetonorm(self, outputpath):
    '''Writes the current XML to a file. 
    It'll update the file if it already exists and create the file otherwise'''

    #Find Name
    name = None
    try:
        name = self._xml.xpath("xxx")[0].text.rstrip().lstrip()
    except Exception as e:
        try:
            name = self._xml.xpath("xxx")[0].text.rstrip().lstrip()
        except Exception as e:
            name = "damn it!"

    if name != None:
        #clean name a bit
        name = name[:35]
        table = str.maketrans(' /#*"$!&<>-:.,;()','_________________')
        name = name.translate(table)
        name = name.lstrip("_-").rstrip("_-")

        #generate filename
        norm_file_name = name + ".xml"
        norm_file_path = os.path.join(outputpath, norm_file_name) 

        #Check if we have that completefile already. If we do, update it.            
        if os.path.isfile(norm_file_path):
            norm_file = etree.parse(norm_file_path, self._parser)
            try:
                normroot = norm_file.getroot()
            except:
                print(norm_file_path + "is broken !!!!")
                time.sleep(10)                
        else:
            normroot = etree.Element("norm")
        jurblock = etree.Element("jurblock")
        self._add_jurblok_attributes(jurblock)
        jurblock.insert(0, self._xml)
        normroot.insert(0, jurblock)
        try:
            normroot.getroottree().write(norm_file_path) #here the Exception occurs
        except Exception as e:
            print(norm_file_path)
            raise e

我知道我的异常处理不是很好,但这只是目前的工作证明。 谁能告诉我为什么会发生错误?

查看导致错误的文件,它的格式不正确,但我怀疑这是因为发生了错误,并且在最新迭代之前一切正常。

最佳答案

为此使用映射网络驱动器似乎是一个错误。让它在本地处理文件时没有这样的异常。

学到了一些东西:)

关于python - lxml + 文件负载 = 随机序列化错误 : IO_WRITE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453730/

相关文章:

python-3.x - 将多个 csv 列合并为一列,同时重复标题

python - xml.etree.ElementTree findall

python:文件路径不再适用于 imp

python - 如何在没有函数的情况下将 executor.map 应用于 for 循环?

python - 获取给定 Python 类实现的所有抽象基类的列表

xml - 这是什么标记语言? ...行尾而不是结束标签

php - 关于 Iphone 和网络服务器通信的多个问题

python - 我怎样才能在模型表单中拥有相当于 django 的管理内联功能?

python - 如何为文本文件创建字典

javascript - 带有 lxml : Javascript Generated Page 的 Xpath 中没有元素