我要求将测试结果放入csv进行报告。在我的python测试代码中,当我没有值时,我的变量以无方式以python方式填充。
我被要求用报告工具的CSV中的“Null”替换它们。我认为这很容易,可能已经解决了一百次。
以下是我提出的代码:
for field in (TestCase.productUnderTest,TestCase.versionUnderTest,TestCase.name,TestCase.results,TestCase.lastTestEnd,TestCase.parent,TestCase.level):
if field == None:
field = 'Null'
ME.csvoutput.write("%s,%s,%s,%s,%s,%s,%s\n" % (TestCase.productUnderTest,TestCase.versionUnderTest,TestCase.name,TestCase.results,TestCase.lastTestEnd,TestCase.parent,TestCase.level))
不幸的是,只会更改for循环范围内的字段。如何在write语句的范围内更改它。
(我会很高兴只写“Null”并保持我的变量不变,但我可以以任何一种方式工作。)
答案 0 :(得分:3)
result = [TestCase.productUnderTest,TestCase.versionUnderTest,TestCase.name,TestCase.results,TestCase.lastTestEnd,TestCase.parent,TestCase.level]
result = map(lambda x:x==None and 'Null' or str(x), result)
ME.csvoutput.write(",".join(result)+'\n')
答案 1 :(得分:1)
这样做:
fields = [str(field) or "Null" for field in (TestCase.productUnderTest,TestCase.versionUnderTest,TestCase.name,TestCase.results,TestCase.lastTestEnd,TestCase.parent,TestCase.level)]
ME.csvoutput.write("%s\n" % ",".join(fields))))
或者,更强大:改为使用生成器对象:
fields = (str(field) or "Null" for field in (TestCase.productUnderTest,TestCase.versionUnderTest,TestCase.name,TestCase.results,TestCase.lastTestEnd,TestCase.parent,TestCase.level))
答案 2 :(得分:0)
要保留您的代码,您可以尝试:
for field_name in ('productUnderTest','versionUnderTest','name','results','lastTestEnd','parent','level'):
if getattr(TestCase, field_name) is None:
setattr(TestCase, 'Null')
我建议查看csv模块。
答案 3 :(得分:0)
你应该使用方法Pandas fillna:
from pandas import DataFrame
DataFrane.fillna(value='NULL', inplace=True)
实施例
import pandas as pd
df = pd.read_csv(csv_file)
df.fillna(value='NULL', inplace=True)