заменить None на Null, на месте - PullRequest
0 голосов
/ 18 октября 2011

У меня есть требование отправить результаты теста в CSV для отчетов.В моем тестовом коде Python, когда у меня нет значения, мои переменные заполняются Python способом None.

Меня попросили заменить их на «Нуль» в CSV для инструмента отчетности.Я думаю, что это легко и, вероятно, было решено сто раз.

Вот код, который я придумал:

   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.Как я могу изменить это для объема записи оператора.

(Я был бы очень рад просто написать «Null» и оставить свои переменные без изменений, но я могу работать в любом случае.)

Ответы [ 4 ]

3 голосов
/ 18 октября 2011
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 голос
/ 18 октября 2011

Сделай так:

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))
0 голосов
/ 22 ноября 2017

Вы должны использовать метод 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)
0 голосов
/ 18 октября 2011

Чтобы сохранить свой код, вы можете попробовать:

for field_name in ('productUnderTest','versionUnderTest','name','results','lastTestEnd','parent','level'):
    if getattr(TestCase, field_name) is None:
        setattr(TestCase, 'Null')

Предлагаю взглянуть на модуль csv .

...