首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.2:.txt到xml.txt

Python3.2:.txt到xml.txt
EN

Stack Overflow用户
提问于 2013-12-13 21:52:30
回答 1查看 147关注 0票数 0

长时间潜伏,第一次海报。我寻找了一些解决方案,但没有找到完全符合我需要的东西。

我的任务如下:示例输入文件

student.txt

内容:

代码语言:javascript
复制
    John Smith 
    Harvard
    4.00
    1600

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

代码语言:javascript
复制
   <applicant>
   <name> John Smith </name>
   <school> Harvard </school>
   <gpa> 4.00 </gpa>
   <sat> 1600 </sat>
   </applicant>

另外:输出文件的名称类似于正在打开的文件的名称。如果输入为student.txt,则out将为studentXML.txt

我试着用切片法(从另一张海报上借用这个):

代码语言:javascript
复制
 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 \Dropbox\22c005\ Project generation.py",第7行,在builtins.IOError: Errno 2中没有这样的文件或目录:'data.txt‘

在修正代码之后

代码语言:javascript
复制
    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

我收到打印声明的回电。

回溯:跟踪(最近一次调用):文件"c:\Users\foobar\XML generation.py",第15行,语法错误:打印xml: c:\Users\foobar\XML generation.py,第1513行

使用“返回xml”进行编辑,将其放入shell。一些格式化问题,将修补和看看会发生什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 22:11:39

您的代码存在一些问题,正如注释中提到的那样,很难判断它们是否在您实际执行的代码中,或者仅仅是在StackOverflow编辑器中发布所带来的格式化问题。

无论哪种方式,这都是代码的问题所在:

  • 您使用的是data.txt的相对路径。这个路径将相对于当前的工作目录,而不是Python脚本的位置。因此,请确保您在data.txt所在的同一目录下运行代码。或者,使用像open("/home/foo/data.txt")这样的绝对路径。
  • 压痕脱落了。前两行缩进一个空格,它们不应该缩进。
  • 第二行中的tags之前的xml不属于那里,是语法错误
  • 打开文件的with语句是注释的一部分:with open("data.txt") as data:应该在它自己的行上,下面的代码缩进4个空格
  • </{0:s)>中使用的是常规的结束括号,而不是卷曲括号

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

代码语言:javascript
复制
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

产额

代码语言:javascript
复制
<name> John Smith </name>
<university> Harvard </university>
<gpa> 4.00 </gpa>
<sat> 1600 </sat>

因此,它几乎是有效的,您只需要用打开和关闭的applicant标记将xml括起来。

编辑:工作目录是在使用时启动程序(任何程序,而不仅仅是python)的地方。如果使用IDE,这完全取决于IDE处理/操作工作目录的方式,为此您需要查阅IDE的文档。

您可以从Python打印工作目录

代码语言:javascript
复制
import os
print os.getcwd()

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

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

代码语言:javascript
复制
import sys
filename = sys.argv[1]

然后像python generate.py data.txt一样从data.txt所在的目录调用脚本。

然而,你的任务是:

您的工作是编写一个称为dataCode(fileName)的python程序。

python程序通常被认为是一个.py脚本,但是dataCode(fileName)是一个函数签名。因此,您可能应该将代码包装在这样的函数中:

代码语言:javascript
复制
def dataCode(fileName):
    # ...
    with open(fileName) as data
        # ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20576656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档