假设我有K和V. K包含一个元组
('String1', 'String2')
而V是浮点数
0.00324
我想要做的就是将两者都写入这样的文本文件中:
('String1', 'String2') 0.00324
或
String1 String2 0.00324
我的代码是:
for k,v in bigrams_frequency.items():
number_unigrams = vocabulary.count(k[0])
if number_unigrams == 0:
continue;
v = v / number_unigrams
print(k,v)
f2.write('\n'.join('%s %s' % (k,v)))
但是,当我打开文本文件时,输出如下所示:
(
'
S
t
r
i
n
g
1
.
.
.
什么可能导致Python像这样打印?我该如何解决这个问题?
答案 0 :(得分:2)
正如评论中所讨论的那样是代码;
K=("string1","string2")
V=0.00324
file = open("test.txt","a")
file.write("{} {}".format(K,V))
file.close()
并生成此输出文件,您在问题中指定为所需的输出;
('string1', 'string2') 0.00324
您在写入文件时也可以使用with
语句,因为with
语句会自动关闭文件,因此您不需要显式关闭它,所以对于您的示例它将是;
with open("test","a") as file:
file.write("{} {}".format(K,V))
只是不要忘记缩进你需要文件的位置,因为只要它不再缩进,文件就会关闭
答案 1 :(得分:0)
您对str.join(xx)功能有错误的理解。此函数"返回一个字符串,该字符串是可迭代xx"中字符串的串联。您可以使用str.format()代替。
答案 2 :(得分:0)
问题出在这里 - f2.write('\n'.join('%s %s' % (k,v)))
join方法需要参数中的可迭代(如列表)。当你给它字符串'String1 String2 Float'时,它会用新行'连接'每两个字母
看起来你要做的就是在新行中写下每个条目(不是每一个字母!),所以用f2.write('{} {}\n'.format(k, v))
之类的东西替换该行。
如果您还没有找到format
,请阅读here。
答案 3 :(得分:0)
你可以这样做:
for k,v in bigrams_frequency.items():
# Other code
f2.write('{}{}\n'.format(join(k),v) )
而且,它会很好。