Python 3.2:.txt到xml.txt

时间:2013-12-13 21:52:31

标签: python xml

长时间潜伏,第一次海报。 我寻找了一些解决方案,并没有找到满足我需求的东西。

我的作业如下:示例输入文件

student.txt

内容:

    John Smith 
    Harvard
    4.00
    1600

“你的工作是编写一个名为dataCode(fileName)的python程序,它以文件的名称作为参数。它将打开文件并创建一个带有标记数据的新文件。上面的示例文件如下:“

   <applicant>
   <name> John Smith </name>
   <school> Harvard </school>
   <gpa> 4.00 </gpa>
   <sat> 1600 </sat>
   </applicant>

另外:输出文件的名称类似于要打开的文件的名称。如果输入是student.txt,那么out将是studentXML.txt

我正在尝试切片(从另一张海报借来的):

 tags = ['name', 'university', 'gpa', 'sat']  #Add desired 
 tags xml = ''#Add xml parsing  with open("data.txt") as data:


#read data and filter out whitespace
lines = [line.strip() for line in data.readlines()]

#Generating xml tags via slicing
xml = '\n'.join(['<{0:s}> {1:s} </{0:s)>'.format(tag, value)
                 for tag, value in zip(tags, lines)])

非常感谢任何帮助。我为编辑没有更多能力而道歉。

使用“data.txt”作为文件追溯。 (与项目位于同一文件夹中):

追踪(最近一次通话):   文件“c:\ Users \ Rokudo Hikaru \ Dropbox \ 22c005 \ Python Project XML generation.py”,第7行,in builtins.IOError:[Errno 2]没有这样的文件或目录:'data.txt'

更正代码后

    with open(fileName) as data:

        #Read data and filter out whitespace
        lines = [line.strip() for line in data.readlines()]

        # Generating xml tags via slicing
        xml = '\n'.join(['<{0:s}> {1:s} </{0:s}>'.format(tag, value)
                         for tag, value in zip(tags, lines)])

    print xml

我正在回复打印声明。

回溯: Traceback(最近一次调用最后一次):   文件“c:\ Users \ foobar \ XML generation.py”,第15行,in 语法错误:print xml:c:\ Users \ foobar \ XML generation.py,第1513行

使用“return xml”编辑将其射入shell。 一些格式问题,会修补并看看会发生什么。

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题,正如评论中所提到的,很难判断它们是否在您实际执行的代码中,或者只是通过使用StackOverflow编辑器发布格式化问题。

无论哪种方式,这都是您的代码出了问题:

  • 您正在使用data.txt的相对路径。此路径将相对于当前工作目录,而不是到Python脚本的位置。因此,请确保运行data.txt所在目录中的代码。,使用类似open("/home/foo/data.txt")的绝对路径。
  • 缩进已关闭。前两行是缩进的一个空格,它们不应该是。
  • 第二行tags之前的xml不属于那里且是语法错误
  • 打开文件的with语句是评论的一部分: with open("data.txt") as data:应该在它自己的行上,并且它下面的代码缩进4个空格
  • 您在</{0:s)>使用常规的右括号而不是大括号

修复后,您的代码将如下所示:

tags = ['name', 'university', 'gpa', 'sat']  #Add desired
xml = '' #Add xml parsing

with open("data.txt") as data:

    #read data and filter out whitespace
    lines = [line.strip() for line in data.readlines()]

    #Generating xml tags via slicing
    xml = '\n'.join(['<{0:s}> {1:s} </{0:s}>'.format(tag, value)
                     for tag, value in zip(tags, lines)])

print xml

哪个收益

<name> John Smith </name>
<university> Harvard </university>
<gpa> 4.00 </gpa>
<sat> 1600 </sat>

所以它几乎可以工作,你只需要用开始和结束applicant标签封装xml。

修改 工作目录是使用shell时启动程序(任何程序,而不仅仅是python)的地方。如果您使用IDE,那完全取决于IDE如何处理/操作工作目录,您需要查阅IDE的文档。

您可以通过

从Python打印工作目录
import os
print os.getcwd()

应该可以帮助您确定工作目录的位置,或者IDE将其设置为。

要将文件名作为命令行参数传递,请使用

import sys
filename = sys.argv[1]

并从python generate.py data.txt实际所在的目录中调用data.txt这样的脚本。

但是你的任务说:

  

你的工作是编写一个名为dataCode(fileName)

的python程序

python程序通常被认为是.py脚本,但dataCode(fileName)是函数签名。所以你可能只是想把你的代码包装在这样的函数中:

def dataCode(fileName):
    # ...
    with open(fileName) as data
        # ...