Python中的单词计数脚本



谁能告诉我为什么每个单词前面都有'b'以及如何读取它?脚本返回如下内容:

word= b'昨天,',count = 3

current_word = {}
current_count = 0
text = "https://raw.githubusercontent.com/KseniaGiansar/pythonProject2_text/master/yesterday.txt"
request = urllib.request.urlopen(text)
each_word = []
words = None
count = 1
same_words ={}
word = []
# сollect words into a list
for line in request:
#print "Line = " , line
line_words = line.split()
for word in line_words:  # looping each line and extracting words
each_word.append(word)
for words in each_word:
if words.lower() not in same_words.keys() :
same_words[words.lower()]=1
else:
same_words[words.lower()]=same_words[words.lower()]+1
for each in same_words.keys():
print("word = ", each, ", count = ",same_words[each])

表示变量words为字节对象。

urllib.request.urlopen()返回一个bytes对象。

要解决这个问题,您可以使用.decode()方法将bytes对象转换为字符串,然后将其附加到列表中。

for line in request:
line_words = line.decode().split() # decode the bytes object to a string
for word in line_words:
each_word.append(word)

python中的b字符串是字节字符串。

当你从HTTP请求中读取时,响应是以字节为单位的,你应该像这样解码它:

line_words = line.decode("utf8").split()

请确保字符串的编码(在我的示例中为UTF-8)与请求的Content-Type标头中的字符集匹配。你可以在请求中发送一个Accept-Charset: utf-8头,告诉服务器返回一个UTF-8字符串。

b表示字节

我想你可以去掉"b"使用.decode()方法将字节解码为字符串。在这种情况下,可以在for循环之前添加以下行:

line = line.decode("utf-8")

在将其添加到each_word列表之前,您还可以通过以下操作从每个单词中删除️:

word = word.decode("utf-8")

相关内容

最新更新