如何在不使用 csv 的情况下获取列中的 .txt 文件?

How do I get a .txt file in columns without using csv?

最好是这样的,但转换成人们所说的"The Old Way"。我正在尝试使用 headers.

获取 4 个列表和 4 个列

到目前为止我有什么(我是 Python 文盲甚至认为这必须在 Python 中)。

旧方法:

print("        Student Report")
print("First   Last      DOB    Rank")
print("--------------------------------")
ReadFile = open("mytext.txt","r")

with ReadFile as f:
   [line.split() for line in f]

csv方式:

import csv
columns = [[] for _ in range(4)]  # 4 columns expected
with open('path', rb) as f:
    reader = csv.reader(f, delimiter=' ')
    for row in reader:
        for i, col in enumerate(row):
            columns[i].append(col)

问题是我如何将这个(参考下面的 "Sample Report")放入一个包含 4 列的正确列表中。

谢谢:)

大约有30个左右的假学生。

预期结果

Sample Report:

             Student Report

First        Last       DOB        Rank

--------------------------------------------

Coreena      Delisio    8/7/1988   Freshman

William      Barnes     10/26/1987 Junior

Joseph       Mahan      9/18/1987  Senior

Susan        Bevly      9/13/1987  Senior

End of Report

感谢大家的反馈和回答,我找到了

这是让我得到这个结果的代码。

## Report's Title

print("             Student Report")

## List Headers

F = ('First')
L = ('Last')
Birth = ('DOB')
Grade = ('Rank')
print('{:10} {:13} {:11} {:4}'.format(F, L, Birth, Grade))
print("--------------------------------------------")
ReadFile = open("input_file.txt","r")

## List of Lists Turned Into Columns

for line in ReadFile:
   list = line.split(',')
   First = list[0]
   Last = list[1]
   DOB = list[2]
   Rank = list[3]
   print('{:10} {:10} {:14} {:10}'.format(First, Last, DOB, Rank)) ## Columns

## 2 Added Blank Lines to Show Cleanliness

print()
print()

## End of Report

print('End of Report')

ReadFile.close()

这个有用吗?

padding = 5
n_columns = 4
columns = [['a','bc3','c','de'],['sadasd','sad','a','a'],['123123'],['123']]
max_entry_widths = [max(len(entry) for entry in column)
                    for column in columns]
column_widths = [width+padding for width in max_entry_widths]
n_rows = max(len(column) for column in columns)

row_str = ("{{: <{}}}" * n_columns).format(*column_widths)

rows = []
for row in range(n_rows):
    entries = []
    for col in range(n_columns):
        try:
            entries.append(columns[col][row])
        except IndexError:
            entries.append("")
    rows.append(row_str.format(*entries))

print('\n'.join(rows))

# a       sadasd     123123     123
# bc3     sad
# c       a
# de      a

我不是这方面的专家,您可以打印出一个字符串,同时定义它的填充以及它可以证明您代表列的位置。

如何执行此操作的一个示例是首先为每个字符串分配一个值,例如:

for lines in open('mytxt.txt'):
    first = lines.split()[0]
    last = lines.split()[1]
    DOB = lines.split()[2]
    rank = lines.split()[3]

接下来您可以打印它们,同时定义第一列中可以打印多少个字符(最适合浮点数),以及各列之间的距离:

    print('{:20} {:20} {:20} {:20}'.format(first, last, DOB, rank))

我决定将每列可以打印的字符限制为 20 个(这也将是您的填充)。您还可以使用以下方式居中、右对齐或左对齐:

##center_justify --> print('{:^20}'.format(center))
##right_justify -->  print('{:>20}'.format(right))
##left_justify -->   print('{:<20}'.format(left))