从txt文件创建表格并计算最小值

4
我需要要求用户提交一个txt文件进行评估,然后我需要设置一个表格并计算某些值(如最大值、最小值、总和等)。但是,我卡住的地方在于如何设置要打印的表格以及如何根据列规范可能找到最大值、最小值和总和。
我的代码如下:----
def main():    
    my_list = [[float(i) for i in line.split(',')] for line in open("Alpha.txt")]
    print(my_list)
    my_list_one = my_list[0]
    my_list_two = my_list[1]
    my_list_three = my_list[2]
    my_list_four = my_list[3]


main()

这个程序所做的事情,只是读取Alpha.txt文件并将数据行分成单独的列表。 我想要做的是将它们放在一个表格中,如下所示...

-----------------------------------------------
|     |   A   |   B   |   C   |   D   |   E   |
-----------------------------------------------
|   1 | 5.00  | 2.00  | 6.00  | 4.00  | 5.00  |
|   2 | 3.00  | 7.00  | 8.00  | 7.00  | 9.00  |
|   3 | 1.10  | 2.20  | 5.80  | 0.10  | 1.30  |
-----------------------------------------------

对于表格格式,您只需使用基本的字符串格式化即可,例如

my_str = "| {:>12.10f} | {:^3d} | {:>12d} |".format(10**(-i), i, 10**i)

此外,我不确定如何接收用户提交的字母(例如A),并计算5.00、3.00和1.00的最小值,除非我为每个可能的选择创建一个if else,这取决于列或行。
任何帮助都将不胜感激!
我的当前程序将输出:
[[1.2, 4.3, 7.0, 0.0], [3.0, 5.0, 8.2, 9.0], [4.0, 3.0, 8.0, 5.6], [8.0, 4.0, 3.0, 7.4]]

4
如果你打算大量处理这类工作,建议查看pandas - Jon Clements
1
完全同意使用pandas;一旦您对其有了一些经验,您就可以在10分钟内完成这个任务。另外,请在main()调用上方添加if __name__ == "__main__":;这允许您将脚本作为模块导入。 - Alex Chamberlain
真的吗?哇,我对Python非常陌生,所以这对我来说都是新鲜事!不过我会去看一下的,谢谢你们两个! - user2840144
1个回答

0

像其他人提到的一样,Pandas是用于数据分析的一个很好的库。然而,使用Pandas需要一定的学习曲线。您可以使用CSV文件和基本的csv读取库(csv库文档)来更简单地解决您的问题。

CSV读取示例

以下是如何读取基本CSV文件的演示:

让我们创建一个基本的CSV文件并将其放置在与下面代码相同的目录中。 如果您使用文本编辑器打开CSV文件,它将如下所示:

data1,data2
1,6
2,7
3,8
4,9
5,10

现在让我们创建一些函数,用于读取CSV并执行您希望完成的操作:
def read_csv_file():
    import csv, os
    this_dir = os.path.abspath(os.path.dirname(__file__))
    csv_file = this_dir+"/sample_data.csv"
    data1_list=[]
    data2_list=[]
    with open(csv_file, 'rb') as csvfile:
        csv_reader = csv.DictReader(csvfile, dialect= 'excel')
        print "1st data row:"
        for csv_row in csv_reader:
            data1_list.append(csv_row["data1"])
            print csv_row["data1"]
            data2_list.append(csv_row["data2"])
    return data1_list, data2_list

def calculate_min(data1):
    from operator import itemgetter
    minimum_data1=min(enumerate(data1), key=itemgetter(1))[1]
    max_data1=max(enumerate(data1), key=itemgetter(1))[1]
    print "the min of the set was: %s"%minimum_data1
    print "the max of the set was: %s"%max_data1

然后您可以在主文件中使用这两个函数:

data1, data2 = read_csv_file()
calculate_min(data1)

然后你将得到这个输出:

1st data row:
1
2
3
4
5
the min of the set was: 1
the max of the set was: 5

如果您想进行其他操作,最好先查看是否已经存在一个库可以完成此操作,否则需要手动实现。

希望这可以帮到您!

-- Peter


你能不使用CSV文件来完成吗?我正在努力学习Python,遇到了这个问题。我渴望找出如何解决它,但没有提到使用CSV文件。但是我会研究CSV文件的! - user2840144
问题的要素包括:用户输入、文件解析、数据解释和操作。@user2840144 提出的方法是手动完成所有文件解析的一种方式。但这并不是必要的,因为还有其他已知格式(如 csv)具有解析器库,这些库随标准 Python 安装一起提供。如果您想找到最快最简单的解决方案,csv 是最好的选择。但如果您想通过编写自己的文本文件解析器来学习东西,那就会有所不同。 - Pswiss87
是的,我原本想进行文本文件解析,但像你所说的CSV更简单、高效。谢谢! - user2840144

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接