如何将单词正确对齐到txt文件中



大家晚上好,我是9岁的David Zi,我真的需要帮助解决这个单词正确对齐的问题,我只尝试了打印,但不太合适。

sample.txt包含:

David Tzu           January 13, 2012        FriedChicken
Mama                March 15, 1980          Sphagetti
Papa                June 27, 1981           Burger

这是我的代码:

file = open("sample.txt", "r")
line_count = 1
for line in file:
if line != "n":
line_count += 1
file.close()

with open("sample.txt") as fi:
print("")
for x in range(1,line_count):
print(x, fi.readline().replace("n", ""))
print("")

上面代码的当前结果如下:

1   David Tzu           January 13, 2012        FriedChicken
2   Mama                March 15, 1980          Sphagetti
3   Papa                June 27, 1981           Burger

预期结果:

Name                  Birthday               Favorite Food
1   David Tzu           January 13, 2012          FriedChicken
2   Mama                March 15, 1980            Sphagetti
3   Papa                June 27, 1981             Burger

我真的很抱歉我糟糕的英语,希望你们都能理解我想表达的意思。

附加代码:#文字长度

file = open("sample.txt", "r")
line_count = 1
for line in file:
if line != "n":
line_count += 1
file.close()

with open("sample.txt") as fi:
print("")
for x in range(1,line_count):
print(x, fi.readline().replace("n", ""))
print("")
file = open("Sample.txt", "rt")
data = file.readline()
words = data.split()
print(len(words))

我不知道我是否理解你的问题。

在你的例子中,你似乎只需要添加第一行正确的空格数

print('    Name                Birthday                Favorite Food')

最小的工作示例。

我只使用io来模拟内存中的文件,这样每个人都可以简单地复制并测试它

text = '''David Tzu           January 13, 2012        FriedChicken
Mama                March 15, 1980          Sphagetti
Papa                June 27, 1981           Burger'''
import io
#fh = open("sample.txt")
fh = io.StringIO(text)
print('    Name                Birthday                Favorite Food')
line_count = 0
for line in fh:
line = line.strip()
if line:
line_count += 1
print(f"{line_count:3} {line}")        

结果:

Name                Birthday                Favorite Food
1 David Tzu           January 13, 2012        FriedChicken
2 Mama                March 15, 1980          Sphagetti
3 Papa                June 27, 1981           Burger

如果您的行数超过999,则{line_count:3}中可能需要更大的数字,Name之前可能需要更多的空格

您只需要使用fh = open()fh.write(line + 'n')fh.close()而不是print()即可将其保存在文件中。或者您可以使用print(..., file=fh)而不是write()打开


如果您不知道列有多长,那么您可能需要读取所有行,拆分为列,然后为列中的每个值获取len(),为每个列获取max(all_lenght_in_column),以后您可以像{variable:lenght}一样将此值与string formatting一起使用。但是它可能需要regex来分割2 or more spaces(s{2,}(上的列。所以这一切要复杂得多。


最终您可以尝试使用带有分隔符s{2,}pandasread_csv

text = '''David Tzu           January 13, 2012        FriedChicken
Mama                March 15, 1980          Sphagetti
Papa                June 27, 1981           Burger'''
import pandas as pd
import io
#fh = "sample.txt"
fh = io.StringIO(text)
df = pd.read_csv(fh, names=['Name', 'Birthday', 'Favorite Food'], sep='s{2,}', index_col=False)
df.index += 1
print(df)

结果:

Name          Birthday Favorite Food
1  David Tzu  January 13, 2012  FriedChicken
2       Mama    March 15, 1980     Sphagetti
3       Papa     June 27, 1981        Burger

您可以将其获取为df.to_string()并保存在普通文本文件中。

with open('output.txt', 'w') as fh:
fh.write(df.to_string())

如果您知道文件中列之间的空间是选项卡空间,则可以通过这种方式进行操作。

with open("sample.txt") as ftr:        
line_number = 1    
print("tName tBirthday tFavorite food")
for line in ftr.readlines():
print("%s t%s" % (line_number, line))
line_number += 1

最新更新