2017-01-04 46 views
0

首先,我是一个新手,并且没有编码背景。python脚本迭代地将输出写入文件

我想创建一个python脚本,将创建以后它可以使用XML API文件,

我有一个CSV文件,其中每行是一个API调用。我可能有200多条这样的线路。 我想在一次读取一行并将xml数据打印到一个文件中,可以说file-1.xml

我可以打印没有任何问题的数据,但找不到任何方法来重定向输出应反复命名为()适用于我在范围内(1..200或东西)的文件

#!/usr/bin/python 
import csv 
with open('file.csv', 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     length=len(row) 
     print """<?xml version="1.0" encoding="UTF-8" ?> 
     <value> 
     <array> 
     <data> 
     <value><i4>%s</i4></value> 
     <value><i4>%s</i4></value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value><i4>%s</i4></value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value>%s</value> 
     <value><i4>%s</i4></value> 
     <value>%s</value> 
     </data> 
     </array> 
     </value> 
    </member> 
    </struct> 
    </value> 
    </param> 
</params> 
</methodCall> 
        """ % tuple(row) 

回答

1

csv.reader类对于每一行都具有行号属性:line_num。只需使用reader.line_num作为文件名的一部分,如

for row in reader: 
    with open('file-{0}.xml'.format(reader.line_num), 'w+') as out: 
     xml_template = "..." # Put your xml template here 
     out.write(xml_template % tuple(row)) 

不需要花哨的额外代码。 但是,这确实假定每个请求都是单独的一行。

此外,通过新的格式指南,习惯上使用字符串格式的{0}和.format样式。因此,最后请使用{0}.format(tuple(row)),而不是%s,最后使用% tuple(row)。只是一个建议,但。见PEP 3101

0
import csv 
with open('file.csv', 'r') as f: 
    reader = csv.reader(f) 
    for i, row in enumerate(reader, start=1): 
     with open('file-{}.xml'.format(i), 'w+') as outfile: 
      outfile.write(pattern % tuple(row)) #for brevity omitted template 

你只需要打开该文件,并write它,就像你从读文件。要跟踪我们正在使用的号码,我们将使用enumerate

相关问题