在适当的位置用Null替换None

时间:2011-10-18 12:52:31

标签: python csv null

我要求将测试结果放入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”并保持我的变量不变,但我可以以任何一种方式工作。)

4 个答案:

答案 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)