作为一个研究案例,我有一部文学小说,由三个主要人物组成,每个人物都有自己的小说章节。即:第一章是角色X(Aaron),第二章是角色Y(Sigerius),第三章是角色Z(Joni),第四章是角色X,第五章是角色Y,第六章是角色Z, ......等等......我想计算所有章节中用于字符X,字符Y和字符Z的单词数量。
这是我目前正在处理的关于一个特定角色(Aaron)章节的Python代码:
from itertools import islice
with open(textfile, 'rt', encoding='utf-8') as f:
# Computes the total word count of the file
text = f.read()
words = text.split()
wordCount = len(words)
print ("The total word count is:", wordCount)
# Aaron's chapters
chapterAaron1 = islice(f, 0, 123)
chapterAaron4 = islice(f, 223 ,326)
chapterAaron6 = islice(f, 639, 772)
chapterAaron10 = islice(f, 1125, 1249)
chapterAaron12 = islice(f, 1370, 1455)
chapterAaron15 = islice(f, 1657, 1717)
chapterAaron19 = islice(f, 2088, 2138)
chaptersAaron = (chapterAaron1, chapterAaron4, chapterAaron6, chapterAaron10, chapterAaron12, chapterAaron12, chapterAaron15, chapterAaron19)
# Computes the total word count of Aaron's chapters (does not work)
wordsAaron = chaptersAaron.split()
wordCountAaron = len(wordsAaron)
print ("The total word count of Aaron's chapters is:", wordCountAaron)
我已经手动决定了txt文件的哪些行,不同的章节(每个字符)开始和结束。我使用islice将txt文件拆分为特定的章节(包含在特定的行号之间),以便计算这些行号(即章节)之间包含的单词数量。但是,我似乎没有找到一种方法来以正确的方式为此目的操作islice。我得到了这个AttributeError:' tuple'对象没有属性' split'。我想要的是将一个特定字符的所有章节存储在一个变量中(例如chaptersAaron),这样我就可以用它做任何事情,例如计算单词总数并搜索其中特定单词的出现次数。
答案 0 :(得分:1)
解决方案应该是:
chaptersAaron=[]
chapterAaron1 = [elem for elem in islice(f, 0, 123)]
chaptersAaron+=chapterAaron1
chapterAaron4 = [elem for elem in islice(f, 223 ,326)]
chaptersAaron+=chapterAaron4
chapterAaron6 = [elem for elem in islice(f, 639, 772)]
chaptersAaron+=chapterAaron6
chapterAaron10 = [elem for elem in islice(f, 1125, 1249)]
chaptersAaron+=chapterAaron10
chapterAaron12 = [elem for elem in islice(f, 1370, 1455)]
chaptersAaron+=chapterAaron12
chapterAaron15 = [elem for elem in islice(f, 1657, 1717)]
chaptersAaron+=chapterAaron15
chapterAaron19 = [elem for elem in islice(f, 2088, 2138)]
chaptersAaron+=chapterAaron19
你的代码示例的问题是,你混合了迭代器,列表和tupels。
islice(f, 1125, 1249)
是一个迭代器
chaptersAaron =(chapterAaron1,...)是一个tupel
并且你想将它们用作列表
我的解决方案中的想法是从空列表chaptersAaron=[]
开始。
按[elem for elem in islice(f, 0, 123)]
将所有迭代器转换为列表,并使用chaptersAaron+=chapterAaron1