Python每个字符写入文件而不是每个字符串

时间:2017-04-12 07:08:47

标签: python io tuples

假设我有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像这样打印?我该如何解决这个问题?

4 个答案:

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

而且,它会很好。