首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python计算文本文件的段落?

如何使用python计算文本文件的段落?
EN

Stack Overflow用户
提问于 2017-03-22 12:35:11
回答 2查看 3.8K关注 0票数 0

我正在尝试写一本书的密码解码器,下面是我到目前为止所得到的。

代码语言:javascript
复制
code = open("code.txt", "r").read() 
my_book = open("book.txt", "r").read() 
book = my_book.txt 
code_line = 0 
while code_line < 6 :
      sl = code.split('\n')[code_line]+'\n'
      paragraph_num = sl.split(' ')[0]
      line_num =  sl.split(' ')[1]
      word_num = sl.split(' ')[2]
      x = x+1

循环会改变段落、行、词变量,每件事情都能正常工作。

但是我现在需要的是如何指定段落,然后是行,然后是单词,然后是while循环中的for循环,这样才能很好地工作。

因此,我想从段落号"paragraph_num“和行号"line_num”中得到单词"word_num“。

那是我的代码文件,我正试图把它转换成文字

“段号”、“行号”、“字号”

代码语言:javascript
复制
70 1 3
50 2 2
21 2 9
28 1 6
71 2 2
27 1 4

然后我希望我的输出看起来像这样

代码语言:javascript
复制
word 
word  
word 
word 
word 
word

我的书“我需要得到单词的文件”看上去像这样

词词词 词词词 词词词

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-22 12:38:45

理论

如果您想从文本中删除段落,可以使用split by "\n\n"

代码语言:javascript
复制
>>> "word\n\nword\nword\n\nword".split("\n\n")
['word', 'word\nword', 'word']

现在,您有了一个段落列表。对于每一段,您可以按照"\n"进行拆分,并获得一行的列表。

对于每一行,您可以在没有参数的情况下进行split,并获得一个单词列表。

嵌套循环

代码语言:javascript
复制
text = """word word word word word word word word word
word word word word word word word
word word word word word word word word word word word word word word word word word word word word word
word word word word word word word word word word word word word word word word word word

word word word word boat word word word word word
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

word word word word word word word word word word word
word word word word word word word word word word word word word word
word word word word word word word word word word word word word word word word word word word word word word"""

for i, paragraph in enumerate(text.split("\n\n")):
    for j, line in enumerate(paragraph.split("\n")):
        for k, word in enumerate(line.split()):
            print("%d, %d, %d : %s" % (i,j,k,word))

它的产出如下:

代码语言:javascript
复制
0, 0, 0 : word
0, 0, 1 : word
0, 0, 2 : word
0, 0, 3 : word
0, 0, 4 : word
0, 0, 5 : word
0, 0, 6 : word
0, 0, 7 : word
0, 0, 8 : word
0, 1, 0 : word
0, 1, 1 : word
0, 1, 2 : word
0, 1, 3 : word
0, 1, 4 : word
0, 1, 5 : word
0, 1, 6 : word
0, 2, 0 : word
0, 2, 1 : word
0, 2, 2 : word
0, 2, 3 : word
0, 2, 4 : word
0, 2, 5 : word
0, 2, 6 : word
0, 2, 7 : word
0, 2, 8 : word
0, 2, 9 : word
0, 2, 10 : word
0, 2, 11 : word
0, 2, 12 : word
0, 2, 13 : word
0, 2, 14 : word
0, 2, 15 : word
0, 2, 16 : word
0, 2, 17 : word
0, 2, 18 : word
0, 2, 19 : word
0, 2, 20 : word
0, 3, 0 : word
0, 3, 1 : word
0, 3, 2 : word
0, 3, 3 : word
0, 3, 4 : word
0, 3, 5 : word
0, 3, 6 : word
0, 3, 7 : word
0, 3, 8 : word
0, 3, 9 : word
0, 3, 10 : word
0, 3, 11 : word
0, 3, 12 : word
0, 3, 13 : word
0, 3, 14 : word
0, 3, 15 : word
0, 3, 16 : word
0, 3, 17 : word
1, 0, 0 : word
1, 0, 1 : word
1, 0, 2 : word
1, 0, 3 : word
1, 0, 4 : boat
1, 0, 5 : word
1, 0, 6 : word

循环对于查看所需的索引是非常有用的。

嵌套列表理解

如果希望快速查找,可以使用嵌套列表理解来创建“3d列表”:

代码语言:javascript
复制
table = [[[word for word in line.split()] for line in paragraph.split("\n")] for paragraph in text.split("\n\n")]

它的产出如下:

代码语言:javascript
复制
[[['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']], [['word', 'word', 'word', 'word', 'boat', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']], [['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']]]

这样你就可以找到想要的词了:

代码语言:javascript
复制
table[1][0][4]
# "boat"

如果您有一个元组列表:

代码语言:javascript
复制
codes = [
        (1, 0, 4),
        (2, 1, 3)
        ]

for i,j,k in codes:
    print(table[i][j][k])
票数 3
EN

Stack Overflow用户

发布于 2020-10-28 13:14:52

如果有人想要另一个与有点不同的代码,

因为我坚信这与这里的“图书密码”有关,arnold/book cipher with python*

我在这里发布了我的代码,如果这个理解是错误的,请告诉我。

代码语言:javascript
复制
# Replace "document1.txt" with whatever your book / document's name is.

BOOK="document1.txt" # This contains your "Word Word Word Word ...." I believed from the very start that you meant, they are not the same - (obviously)

# Read book into "boktxt"
def GetBookContent(BOOK):
    ReadBook = open(BOOK, "r")
    txtContent_splitted = ReadBook.read();
    ReadBook.close()
    Words=txtContent_splitted

    return(txtContent_splitted.split())


boktxt = GetBookContent(BOOK)

words=input("input text: ").split()
print("\nyou entered these words:\n",words)

i=0
words_len=len(words)
for word in boktxt:
    while i < words_len:
        print(boktxt.index(words[i]))
        i=i+1

x=0
klist=input("input key-sequence sep. With spaces: ").split()
for keys in klist:
        print(boktxt[int(klist[x])])
        x=x+1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42951804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档