2017-01-04 4 views
0

Прежде всего, я новичок, и у меня нет фона для кодирования.скрипт python для записи вывода в файл итеративно

я пытаюсь создать питон скрипт, который будет создавать файл апи XML, который может быть использован позже,

У меня есть CSV-файл, где каждая строка для одного апи вызова. У меня может быть 200 таких линий. Я пытаюсь прочитать одну строку во времени и распечатать данные xml в файл, скажем, файл-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. Итак, вместо %s через ваш шаблон и % tuple(row) в конце используйте {0} и .format(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