在Python中创建带有文本的3x3

时间:2015-05-09 11:59:15

标签: python loops

据我所知,还有其他一些与此有关的帖子,但我正在寻找一种简单的方法,用Python从文本文件加载的单词形成3x3网格。

所以我使用以下方法从文本文件加载我的文字:

file = open("words.txt","r").readlines()

并尝试以如下形式打印:

Cat Dog Fish
Log Mouse Rat
Horse Cow Meow

理想情况下,我尝试使用for-loop但无法弄清楚如何在三次打印后添加\ n。

4 个答案:

答案 0 :(得分:2)

使用计数器在必要时添加新行:

for num, word in enumerate(file, 1):
    print word.strip(),
    if num % 3 == 0:
        print

理想情况下,从文件中读取行的最佳方法是不将它们全部读入一个列表(除非您明确需要它们),并使用上下文管理器确保文件正确关闭:

with open('words.txt', 'r') as f:
    for num, word in enumerate(f, 1):
        print word.strip(),
        if num % 3 == 0:
            print

答案 1 :(得分:2)

您可以使用tabulate模块

from tabulate import tabulate
f = open("words.txt","r").readlines()

words = list(map(str.split, f))
print tabulate(words)

输出:

In [18]: print tabulate(words)
---  -----  ----
Cat  Dog    Fish
Log  Mouse  Rat
Foo  Bar    Baz
---  -----  ----

但是如果你的words.txt中每行有一个单词,那么这应该有效:

from tabulate import tabulate
f = open("words.txt","r").readlines()
f1=[f[i:i+3] for i in range(0,len(f),3)]
print tabulate(f1)

答案 2 :(得分:1)

假设您的文件每行包含一个单词:

lines = open("words.txt","r").readlines()
words = list(map(str.strip, lines))
for i in range(0, 9, 3):
    print(' '.join(words[i:i+3]))

首先我像你一样阅读这些行,然后删除尾随换行符以获取单词,然后我以3步为单位遍历列表,并打印每个以空格连接的三元组。

答案 3 :(得分:0)

毕竟,你只想添加足够的空格来使每行的每个单词对齐,但只有最小的空格可能。同样,每一行必须对齐,但这不是问题。

要填写空格,您必须首先找到该行中最大的单词。然后,您可以定义所需的行宽。使用此宽度,您可以为每个单词添加缺少的空格。

让我们假设您的单词存放在二维列表中:words_list = [[Cat, Dog, Fish], [Log, Mouse, Rat]]

我们假设每个子列表具有相同的长度。你现在必须找到每一行中最大的单词。为此,我们将迭代这些单词,并找到最大的单词:

# This list contains the maximum width of the row
# We set it to [0, 0, ..., 0] to start (in fact, no length will
# be negative)
# Every sublist have the same length = len(list1)
widths = [0 for i in range len(words_list[1])]

# Now, we'll iterate on the lines, and find the biggest width
for line in words_list:
    for biggest, word in zip(widths, line):
        # check if this word will expand the row
        if len(word) > biggest:
            biggest = len(word)

现在,widths包含每行的最大长度。现在,让我们打印它们。请注意,我们必须为每个最大宽度添加1,否则会出现一些错误。

for line in words_list:
    text_line = ""
    for length, word in zip(widths, line):
        text_line += word
        text_line += " " * (length - len(word) + 1)
    print(text_line)