在python中将“None”写入文件

时间:2017-09-17 21:31:22

标签: python file io null

我有一个包含JSON对象行的txt文件。 我正在用Python解析这个文件,我正在编写一个文件,其中的每一行都是一个记录(逗号分隔)我是从JSON对象构建的。

现在,当我构建此文件时 - 某些值可能为Null(或Python中为None)。所以这就是我写的:

a = 'abc'
b = None
str = a + "," + b
file.write(str+\n)

但我一直收到这个错误: TypeError: coercing to Unicode: need string or buffer, NoneType found

所以我的问题是 - 如何在字符串中将“Null”值写入文件中,所以当我将文件加载到表中时 - 该位置的值实际上是Null? 如何将此值保存在文件中?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用str.format

a = 'abc'
b = None
file.write("{},{}\n".format(a, b))

您获得的错误位于file.write上方的行中。连接项目以形成字符串时,连接的所有项目必须也是字符串。这意味着,你需要做一些事情:

string = a + ',' + str(b)
file.write(string + '\n')

值得注意的是,您不应使用strdictlist来命名变量,因为它会隐藏具有相同名称的内置类。

您也可以考虑使用NaN,或者mentioned只需要一个空字符串""而不是None。此外,请查看csv模块,了解如何写入CSV文件。以下是csv documentation

的示例
import csv
with open('eggs.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',')
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

答案 1 :(得分:0)

如果您有None值时有空字符串,那么您可以写:

a = 'abc'
b = None
row = a + "," + (b or "")
file.write(row + "\n")

请不要使用str作为变量名,因为您隐藏了内置函数/类

或者更一般地说,如果你有一个项目清单:

items = ['abc', None]
row = [(item or "") for item in items]
file.write(",".join(row) + "\n")

或使用CSV模块。

使用JSON,您还可以使用整数listdict。要在字符串中转换为CSV格式的序列化,您可以使用:

def to_string(obj):
    if obj is None:
        return ""
    elif isinstance(obj, (list, dict)):
        raise TypeError(repr(type(obj)))
    else:
        return str(obj)

row = [to_string(item) for item in items]
file.write(",".join(row) + "\n")

此处禁止listdict序列化。