【发布时间】:2017-04-27 13:40:19
【问题描述】:
我正在解析许多 xml 文件并将某些信息放入 csv 文件中。因为我的 xml 文件被命名为:“1.xml”、“2.xml”等...我正在使用 for 循环来循环浏览不同的 XML 文件标题。但是,根据我在 for 循环中使用的范围,我的 csv 文件包含不同的数据。例如,当我的 for 循环范围为 1:200 时,我的 csv 文件包含我的 xml 文件 1 到 199 的信息。但是,当我将范围更改为 1:300 时,我的 csv 文件只包含我的 xml 文件 217 到 249 的信息. 实际存储在我的 csv 文件中的信息会根据我输入的 for 循环范围而改变。有没有其他人遇到过这个错误,你有什么解决办法吗?
我的代码如下:
import xml.etree.ElementTree as ET
import csv
from pathlib import Path
# open a file for writing
data_labels = open('DataLabels.csv', 'w', newline='')
missing_files = open('MissingFiles.csv', 'w', newline = '')
# create the csv writer object
csvwriter = csv.writer(data_labels)
csvwriter2 = csv.writer(missing_files)
data_head = []
data = []
missingfiles = 0
missfiles = []
MediaId = "Media Id"
#data_head.append (MediaId)
Family = "Family"
#data_head.append (Family)
Species = "Species"
#data_head.append (Species)
Genus = "Genus"
Content = "Content"
ClassId = "ClassId"
#data_head.append (Genus)
data_head.append(MediaId)
# Family = member.find('Family').tag
data_head.append(Content)
data_head.append(ClassId)
data_head.append(Family)
# Species = member.find('Species').tag
data_head.append(Species)
# Genus = member.find('Genus').tag
data_head.append(Genus)
csvwriter.writerow(data_head)
for i in range (1, 190):
#print (i)
data = []
inputfilename = str(i)+ ".xml"
my_file = Path(inputfilename)
if my_file.is_file():
data_labels = open('DataLabels.csv', 'w', newline='')
tree = ET.parse(inputfilename)
root = tree.getroot()
MediaId = root [2].text
Content = root[4].text
ClassId = root[5].text
Family = root[6].text
Species = root[7].text
Genus = root[8].text
#print (vote)
#count = 0
#for Image in root.find('MediaId'):
#print (child.tag, child.attrib)
#name = child.find('MediaId').text
# print (Image.find ('MediaId').text)
##csvwriter.writerow (data_head)
#data = []
#if count == 0:
# print ("count is zero i'm in loop")
# MediaId = member.find('MediaId').tag
# count = count + 1
#else:
#MediaId = root.findall('MediaId').text
data.append(MediaId)
data.append (Content)
data.append (ClassId)
#Family = member.find('Family').text
data.append(Family)
#Species = member.find('Species').text
data.append(Species)
#Genus = member.find('Genus').text
data.append(Genus)
csvwriter.writerow(data)
data_labels.close()
#print (data)
else:
missingfiles = missingfiles +1
missfiles = []
missfiles.append(inputfilename)
csvwriter2.writerow(missfiles)
print ("missing", missingfiles, "files")
data_labels.close()
missing_files.close()
print ("done")
【问题讨论】:
-
哪个操作系统?我不明白你是如何获得任何数据的。
for循环内的data_labels = open('DataLabels.csv', 'w', newline='')不断覆盖文件。在 linux 上,它将取消您正在写入数据的原始文件的链接。在 Windows 上,这不是共享违规吗? (我没有一台机器来测试那个……)。
标签: python csv xml-parsing