我有一个包含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? 如何将此值保存在文件中?
谢谢!
答案 0 :(得分:1)
使用str.format
。
a = 'abc'
b = None
file.write("{},{}\n".format(a, b))
您获得的错误位于file.write
上方的行中。连接项目以形成字符串时,连接的所有项目必须也是字符串。这意味着,你需要做一些事情:
string = a + ',' + str(b)
file.write(string + '\n')
值得注意的是,您不应使用str
,dict
或list
来命名变量,因为它会隐藏具有相同名称的内置类。
您也可以考虑使用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,您还可以使用整数list
和dict
。要在字符串中转换为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")
此处禁止list
和dict
序列化。