将文本文件转换为表格格式

Turning a text file into a tabular format

我在尝试正确格式化文本文件以符合学校项目所需的标准时遇到问题。我已经坚持了一段时间,我对编码仍然很陌生,想知道是否有人有我可以理解和实施的答案,希望我可以向更有经验的人学习。

我想转换一个可以由用户输入的文本文件,在文件中看起来像这样:

Lennon 12 3.33
McCartney 57 7
Harrison 11 9.1
Starr 3 4.13

并创建它以适合这样的表格格式:

Name            Hours      Total Pay
Lambert            34         357.00
Osborne            22         137.50
Giacometti          5         503.50 

我可以创建 headers,虽然它可能不是很漂亮的代码,但是当我打印测试文件的内容时,结果通常是这样的:

Name            Hour      Total pay
Lennon 12 3.33
McCartney 57 7
Harrison 11 9.1
Starr 3 4.13

而且我不明白如何正确地格式化它以使其看起来像一个正确的 table 并且与实际的 headers 完全一致,我不知道如何真正解决它或什至从哪里开始,因为我还没有在这方面取得任何实际进展。

在尝试使用 file_open.read().rstrip("\n).format 之类的东西后,我把我的代码分解成骨架,把索引搞得一团糟,有时不知何故只剩下单个字母出现:

file_name = input("Enter the file name: ")

print("Name" + " " * 12 + "Hour" + " " * 6 + "Total pay")
with open(file_name, 'r') as f:

    for line in f:

        print(line, end='')

我知道它看起来很简单,因为它确实如此。我们的导师希望我们使用 "open" 命令,并尽量远离那些可能会降低可读性但仍尽可能紧凑的东西。 这包括第三方工具的导入,它减少了使用 beautifultable 之类的东西的机会,就像其他一些朋友提供的那样一个更简单的出路。

我有一个 class 朋友说要读取将它变成列表的行并从那里用一些格式调整它,另一个 class 朋友说我可以在不列出的情况下格式化它它;虽然我发现换行符“\n”出现在每个列表索引的末尾如果把它变成一个列表

例如:['Lennon 12 3.33\n', 'McCartney 57 7\n', 'Harrison 11 9.1\n', 'Starr 3 4.13']

虽然我不明白的是如何格式化列表中的内容,以便名称可以与每个数字变量分开并与我不了解的 header 一致'我对 for 循环没有太多经验,很多人说如果我有这个想法,可以在我的 class 中轻松修复。

我并不是在寻找直接编码的答案,而是在寻找正确的方向或在哪里阅读如何操作列出的内容

您可以为此使用 pandas,数据框将完成所需的工作

import pandas as pd
df = pd.read_csv('file.txt', sep='\s{1,}')
df.columns = ['Name','Hours','Total Pay']
print(df)

希望对您有所帮助。

这里有一些东西可以让你朝着正确的方向前进:

data_filename = 'employees.txt'
headers = 'Name', 'Hours', 'Rate'  # Column names.

# Read the data from file into a list-of-lists table.
with open(data_filename) as file:
    datatable = [line.split() for line in file.read().splitlines()]

# Find the longest data value or header to be printed in each column.
widths = [max(len(value) for value in col)
            for col in zip(*(datatable + [headers]))]

# Print heading followed by the data in datatable.
# (Uses '>' to right-justify the data in some columns.)
format_spec = '{:{widths[0]}}  {:>{widths[1]}}  {:>{widths[2]}}'
print(format_spec.format(*headers, widths=widths))
for fields in datatable:
    print(format_spec.format(*fields, widths=widths))

输出:

Name       Hours  Rate
Lennon        12  3.33
McCartney     57     7
Harrison      11   9.1
Starr          3  4.13