2017-01-04 63 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

相關問題