尝试在Python 3.6中从文本文件创建表

时间:2016-10-20 00:45:26

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

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

我不相信这是set方法。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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