gpt4 book ai didi

Python 字数统计不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:23 25 4
gpt4 key购买 nike

Textfile1 包含单词,其中一些是重复的:

Train

21street

Train

还有更多。

我需要计算它们出现的次数并将其写入 Textfile2,同时删除重复项。此外,按字母顺序排列,这就是为什么我在那里有 sorted 的原因。最终 Textfile2 应该是什么样子的示例:

Train 2

21street 1

...等等。

这是我的尝试:

file1=open(textfile1,"r")
list1=[]

for line in file1:
list1.append(line)

import collections

counter=collections.Counter(list1) #not sure how I can use this in my program

list2=list(set(list1))

list3=sorted(list2)

file2=open(textfile2,"w")

for i in list3:

file2.write(i+count((i)in list1))

字数统计好像不行,不知道怎么解决。感谢您的帮助。

最佳答案

让我们逐步进行一些更改,从您的错误开始。

file2.write(i+count((i)in list1))
# ^^^^^^^^^^^^^^^^^^
# NameError: name 'count' is not defined

问题是您访问的计数不正确。 Counter 的工作方式类似于 dict;键是正在计算的内容,值是计数 (int)。您将 Counter 命名为 counter,因此要访问 i 行的计数,请将其更改为此,这会给其他人带来错误原因:

file2.write(i+counter[i])
# ^^^^^^^^^^
# TypeError: must be str, not int

即使我们成功获得计数,我们也不能像这样将它添加到行 i 中。线和计数是两种不同的类型;一个是文本 (str),另一个是数字 (int)。我们需要将该数字转换为其文本表示。如果这让您感到困惑,可以这样想:2 + 2 == 4"2"+ "2"== "22"。方法如下:

file2.write(i+str(counter[i]))

没有更多错误,但根据您的测试方式,作为 file2 打开的文件可能仍然是空的。只有在完成后关闭它,更改才会写入磁盘。为了永远不会忘记这样做,您可以使用 with 语句将簿记工作留给 Python。在缩进 block 的末尾,文件自动关闭。下面是完整的代码,还有一些注释更改:

# imports at the top
import collections

list1=[]
with open(textfile1,"r") as file1:
for line in file1:
list1.append(line)
# file1 automatically closed here
counter=collections.Counter(list1)
list2=list(set(list1))
list3=sorted(list2)
with open(textfile2,"w") as file2:
# i implies index which it isn't; let's call it line too
for line in list3:
file2.write(line+str(counter[line]))
# file2 automatically closed here

运行后,以 file2 打开的文件将如下所示:

21street
1Train
2

数字在下一行结束。发生这种情况的原因是,您存储在列表中的线路不仅仅是 "21street""Train",而是 "21street\n""Train\n"。末尾的 "\n" 是换行符,用作行分隔符。如果您在那之后添加任何文本,它将在新的一行结束——这就是重点。在 list 中,不再需要这样的分隔符,所以让我们删除它:

        list1.append(line.rstrip("\n"))
# ^^^^^^^^^^^^^

现在你的输出将是这样的:

21street1Train2

再次写入文件时,您需要在正确的位置添加分隔符。什么是正确的地方?在一行的末尾。此外,行和计数之间的空格会很好:

        file2.write(line+" "+str(counter[line])+"\n")
# ^^^^ ^^^^^

最终如愿输出:

21street 1
Train 2

关于Python 字数统计不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com