首先,我是一个新手,没有编码背景。
我正在尝试创建一个python脚本,它将创建一个可以在以后使用的xml api文件,
我有一个csv文件,其中每一行用于一个api调用。 我可能有200多条这样的线。 我试图在一次读取一行并将xml数据打印到文件中,比如说file-1.xml
我可以打印数据没有任何问题,但我找不到一种方法来重定向此输出一个应该迭代命名的文件(例如对于范围内的i(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)First of all I am a newbie, and has no background on coding.
i am trying to create a python script that will create an xml api file which can be used later,
i have a csv file where each line is for one api call. I might have 200+ such lines. I am trying to read one line at time and print the xml data into a file, lets say file-1.xml
I can print the data with out any issues, but I could not find a way to redirect this output a file which should be named iteratively (e.g for i in range(1..200) or something)
#!/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)最满意答案
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样式的字符串格式。 因此,最后通过模板和% tuple(row)代替%s ,而在末尾使用{0}和.format(tuple(row)) 。 不过只是一个建议。 见PEP 3101 。
The csv.reader class has a line number attribute for each row: line_num. Simply use reader.line_num as part of the file name like
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))No fancy extra code needed. This does assume, though, that each request is on its own, single line.
Also, with new formatting guidelines, it is customary to use the {0} and .format style of string formatting. So instead of %s all through your template and % tuple(row) at the end, use {0} and .format(tuple(row)) at the end. Just a suggestion, though. See PEP 3101.
更多推荐
发布评论