【问题标题】:Trying to create a table from a text file in Python 3.6尝试从 Python 3.6 中的文本文件创建表
【发布时间】:2016-10-20 00:45:26
【问题描述】:

我刚开始学习 Python,对于我的项目,我们需要获取一个文件并创建一个表格,其中列出一列中的团队名称,并在另一列中获胜,并按字母顺序排列,并且必须使用 set 方法。作为旁注,我参加的课程完全是一场灾难,我们甚至从未报道过这些信息,所以我提前为我的无知道歉。谢谢。

我不相信这是在 set 方法中。

inputFile = open('WorldSeriesWinners.txt', 'r')
lineList = inputFile.readlines()
for line in sorted(lineList):
    sorted (inputFile)
    print(line.rstrip())

【问题讨论】:

  • 你认为这段代码在做什么? sorted(inputFile) 不会对任何东西进行排序(因为您已经用尽了输入文件),即使这样做了,它也不会做任何有用的事情,因为您没有在任何地方分配返回值来使用它......似乎with open('...') as f: sys.stdout.writelines(sorted(f)) 会根据需要进行排序(因为您是按第一个字段排序),但文件格式问题可能会影响其是否有效。
  • 您能否发布更多关于您的要求和文件格式的信息?乍一看,我假设每一行都包含一个团队名称,您需要计算每个团队出现的次数,然后使用它,您需要输出团队名称和获胜次数,排序按获胜次数。不过我不想假设,所以如果可以的话,请澄清一下。
  • 另外,你真的是指3.6吗? 3.6 仍处于测试阶段...
  • 另外,我不确定您指的是什么set 方法...听起来docs.python.org/3/tutorial/datastructures.html#sets 在这里没有用处。
  • 编写的代码确实按字母顺序打印出列表,这就是它所做的一切,是的,我确定 3.6。你的假设是正确的,它只是一个单独列出团队的文本文件,输出应该是团队的胜利次数。现在我已经无数次阅读说明,它只是指方法。

标签: python python-3.x create-table


【解决方案1】:

所以这可能不是解决这个特定问题的最快或最漂亮的解决方案,但我通常会这样做。

def ReadCsv(fileToRead,colDelim = ",", rowDelim = "\n"):
    fileHandle = open(fileToRead,"r")
    fileContent = fileHandle.read()
    fileLines = fileContent.split(rowDelim)
    fileAsListOfLists = [k.split(colDelim) for k in fileLines]
    return fileAsListOfLists

【讨论】:

    【解决方案2】:

    所以你有一个像这样的文件:

    Yankees
    Redsox
    Yankees
    Cardinals
    Dodgers
    Redsox
    Yankees
    

    你需要这个:

    Yankees   3
    Redsox    2
    Dodgers   1
    Cardinals 1
    

    首先,我仍然不明白你在这里如何使用set。您想计算事物,但 set 中的项目是唯一的,因此无法计算项目出现的次数。您可能打算使用dict。请注意,在您阅读文件时,对其进行排序是没有用的,因为无法对 dict 进行排序:

    winners = {}
    for team_name in open('WorldSeriesWinners.txt'):
        team_name = team_name.strip() # get rid of the newlines
        winners[team_name] = winners.get(team_name, 0) + 1
    

    team_name 是键,winners.get(team_name, 0) 将返回该团队的值,除非尚未添加,在这种情况下它将返回 0。您将1 添加到已经存在的值中,然后将新值放回winners。在对每一行都这样做之后,你会得到一个像{"Yankees":3, "Dodgers":1, ... } 这样的字典。或者,您可以使用一个为您计算的模块。

    https://docs.python.org/3.3/library/stdtypes.html#dict.get https://docs.python.org/3.3/library/collections.html#collections.Counter

    这是您解决问题第一部分的方法。第二部分,您需要将其转回可以排序的列表。 winners.items() 会给你一个类似[("Yankees", 3), ("Dodgers", 1) ... ] 的列表

    https://docs.python.org/3.3/library/stdtypes.html#dict.items

    sorted 可以接受 key 参数,告诉它在每个项目上查看什么来决定它的去向,这就是告诉它查看获胜次数的方法。

    https://docs.python.org/3/library/functions.html#sorted

    要分列打印,请查看format,它可以确保每列具有相同的空间量

    https://docs.python.org/3/library/functions.html#format

    我认为您会发现链接文档中的示例将是您解决问题其余部分的良好起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多