大家晚上好,我是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,}
的pandas
和read_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