【问题标题】:Closing file after converting xml to csv将xml转换为csv后关闭文件
【发布时间】:2014-07-24 22:19:54
【问题描述】:

这是我的小脚本(基本上只是模块 xmltocsv 的基本用途)代码,以便将 (7Mo) 周围的 xml 文件转换为 csv。

我有一个小问题,因为这个转换器 xml2csv 的使用,直到我结束脚本(关闭我的 shell)才关闭文件,这导致我出现一些问题,因为我使用了新的 csv(在同一个脚本中)进行一些过程,但由于它没有完全写入磁盘,因此忘记了一些数据。

当我手动结束脚本时,我在磁盘上看到文件大小改变了 1ko。你能告诉我如何将文件完整地写入磁盘...比如通过转换器刷新所有数据过程。

#!/usr/bin/env python
# -*- coding: UTF8 -*-
import csv
from xmlutils.xml2csv import xml2csv
import datetime
import time

#Declaration du jour

jour = datetime.date.today()

#Conversion du fichier xml en CSV

inputFile = "../source_xml/source-2014-06-03.xml"
output = "../source_csv/drop"+str(jour)+".csv"

converter = xml2csv(inputFile, output , encoding="utf-8")
converter.convert(tag="product",delimiter="|")

with open("../source_csv/drop"+str(jour)+".csv", 'r+') as output:
    read_data = output.read()
output.close

我尝试用“with open”打开它并关闭它,但它也不起作用。

感谢您的帮助。

【问题讨论】:

  • with 块为你关闭文件
  • 是的,谢谢,我只是忘了从我的脚本中删除它。但即使你这样做,它也不会在你的磁盘上写入完整的文件,总是缺少 1ko

标签: python xml csv


【解决方案1】:

两点:

  1. 您在调用close 方法时忘记了()

  2. 如果您使用with 关键字open 一个文件,则无需在with 块之后手动关闭它。 Python 将确保一旦不再需要该资源就将其关闭,即使发生异常也是如此。

documentation

【讨论】:

  • 嗨,谢谢 timgeb,我忘了从脚本中删除 close methof。实际上,即使您也使用 with 关键字,它也不起作用,总是缺少 csv 上的一些数据。转换后的 xml 大约是 7Mo
【解决方案2】:

如果您使用的是 knadh-xmlutils 中的 xmd2csv,它似乎永远不会关闭输出 csv 文件。

所以你应该首先在 xml2csv 的 python 代码中验证输出文件是否以self.output 的形式打开,而不是像我知道的版本那样关闭。如果是这种情况,您应该按照converter.convert(...) 行与

converter.output.close()

【讨论】:

  • 非常感谢 serge !我没走多远,我在你的答案之前已经测试了 converter.close() 但我对对象编程还不够好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2015-10-28
  • 2014-11-22
  • 2017-04-18
  • 1970-01-01
  • 2013-06-10
相关资源
最近更新 更多