我正在尝试做一些非常简单的事情。我有点沮丧为什么我的代码不起作用,所以任何帮助都表示赞赏:)。
我的程序读入数据,然后创建一个字典,记录特定项目发生的次数(我正在使用Twitter数据并计算主题标签的出现次数)。我想输出顶级推文,并使用以下方法找到了一个很好的简单方法:
def main():
tweet_file = open(sys.argv[1])
tweet_dic = lines(tweet_file) #function that makes my dictionary
for i in range(0,10):
big_key = max(tweet_dic, key = lambda i: tweet_dic[i])
big_value = tweet_dic[big_key]
sys.stdout = big_key + " " + str(big_value)
del tweet_dic["big_key"]
tweet_file.close()
我使用此错误的原因是AttributeError: 'str' object has no attribute 'write'
现在我使用print
将两个不同的值输出到终端就好了,它们可以放在两个不同的print
语句中,没有任何问题,因为我不需要连接或任何东西。我检查了两种变量类型,正如预期的那样,它们始终是str
& int
。
我对str
(要转换的整数)函数的理解是你应该能够传入一个整数并获得一个字符串表示!在转换之后,我能够在没有问题的情况下打印出这样的东西。
要考虑的事情可能会将其抛弃 - big_key
有时可能是由string
从Unicode转换而来的.encode('utf-8')
。否则我的文件的输出(在单独的行上打印)看起来像:
MTVHottest 60
KCAMexico 38
EXO 26
CD9 24
Unicode 19
Coders 18
AlonsoVillapandoTrendy 17
Unicode 14
Unicode 14
有什么想法吗?提前谢谢!
答案 0 :(得分:0)
您获得的具体错误来自以下行:
sys.stdout = big_key + " " + str(big_value)
这不是输出到标准输出的方式。
使用print
将是适当的方法:
print(big_key + " " + str(big_value))
您的代码示例中还有一些其他奇怪的内容,例如在引号中使用big_key
然后使用"big_key"
。所以可能不是你的错误和错误的结束。
答案 1 :(得分:0)
您获得的错误是由于:https://docs.python.org/2/library/sys.html#sys.stdout
stdout和stderr不需要是内置文件对象:任何对象都是可以接受的,只要它有一个带有字符串参数的write()方法。
stdout和stderr是写入数据的位置,你不应该将数据本身分配给stdout,这就像你正在做的那样。
正如其他人提到的那样,你可以将stdout分配到你想要的位置,然后使用print命令实际获取数据。但是,如果您要做的只是将一行文本打印到文件中,那么为什么不打开文件并正常写入文件呢?
with open(tweet_file, 'w') as f:
f.write(big_key + " " + str(big_value))