据我所知,还有其他一些与此有关的帖子,但我正在寻找一种简单的方法,用Python从文本文件加载的单词形成3x3网格。
所以我使用以下方法从文本文件加载我的文字:
file = open("words.txt","r").readlines()
并尝试以如下形式打印:
Cat Dog Fish
Log Mouse Rat
Horse Cow Meow
理想情况下,我尝试使用for-loop但无法弄清楚如何在三次打印后添加\ n。
答案 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)