无法编写一个程序来计算文件中一行中的字符串

时间:2018-05-25 02:23:05

标签: python

我的Python课程有几项任务。我被困在哪里开始。

基本上,他们可以归结为编写各种程序来打印具有最多关注者数量的用户名,并且所有用户名都以字母数字顺序打印相同的计数。有问题的虚拟文件名为follows.txt,包含以下内容:

andrew fred
fred
judy andrew fred
george judy andrew
john george

每行以用户名开头,然后每个姓名后面跟着他们的名字。但是主文件要大得多,并且包含非字母数字字符。

编辑:我需要写什么才能带回具有最高计数的用户名,该用户名也可用于包含#等字符的用户名?

我尝试了几种方法,但在找到正在尝试编写代码的正确方法时遇到了一些错误。

user = list()
count = ()
maxCount = ()
follows = ['andrew fred', 'fred', 'judy andrew fred', 'george judy andrew',
           'john george']

以及:

with open('follows.txt', 'r') as follows:
    for line in follows:
        for word in line:
            count += 1
            word += 1
            if count > maxCount:
                maxCount == count
                count == 0
                user.append(line(0))
            elif count == maxCount:
                user.append(line(0))

使用上面的代码,我使用的程序无法打开文本文件,因此我将其转换为程序能够读取的内容,但代码转换为注释是我认为应该工作。这是我能够到达的地方。

5 个答案:

答案 0 :(得分:0)

您可以open该文件,并为每一行.split()将其转换为单词列表,例如。

with open('follows.txt') as follows:
    data = [line.split() for line in follows]

这会为您提供一个行列表,其中每行是一个单词列表。这将是一个很好的起点。

请注意,假设follows.txt位于您的工作目录中(通常是您从python启动的地方。尝试将完整路径传递给open(),如果这不起作用。

答案 1 :(得分:0)

以下是一些提示:

  • Python中的字符串有一个名为split()的方法,它将字符串分成字符串列表。如果你没有传递任何参数,它会假设你按空格分割:

    >>> 'judy andrew fred'.split()
    ['judy', 'andrew', 'fred']
    
  • Python的内置len()函数告诉您任何对象有多少元素。对于列表,它可以按预期工作:

    >>> len(['judy', 'andrew', 'fred'])
    3
    
  • 当您使用Python读取文件时,最常见的是逐行执行:

    >>> with open('file.txt') as file:
    ...     for line in file:
    ...         print(line)
    andrew fred
    fred
    judy andrew fred
    george judy andrew
    john george
    

您不必担心#等字符,因为split()方法无法区分#和任何字母数字字符。

答案 2 :(得分:0)

您可以使用len()readlines()split()函数以及其他答案中提到的列表推导。除此之外,您还可以使用字典理解以更有意义的方式保存数据。

In [1]: with open('follows.txt', 'r') as f:
    ...:     follows = {p[0]: len(p) - 1 for p in [user.split() for user in f.read().splitlines()]}
    ...:

In [2]: follows
Out[2]: {'andrew': 1, 'fred': 0, 'george': 2, 'john': 1, 'judy': 2}

答案 3 :(得分:0)

我能想到的最简单的方法是确定包含最多单词的行,并从中减去1以获得关注者的数量。请注意,这可能无法处理" tie"你想要的方式(但你从未提及在那种情况下该做什么)。

with open('follows.txt', 'r') as follows:
    mostWords = max(follows, key=lambda line: len(line.split()))

maxCount = len(mostWords.split()) - 1

print(maxCount)  # -> 2

答案 4 :(得分:0)

您不需要在每行中包含第一个单词以供关注者计数,并返回具有最多关注者的用户列表。因此,首先使用分区然后拆分。计算最大频率并返回适当的值。

with open('follows.txt') as f:
    content = f.readlines()
content = [x.strip() for x in content]
foll_list = []
for i in content:
    follow = (i.partition(' ')[2]).split()
    foll_list.extend(follow)
foll_count = {x:foll_list.count(x) for x in foll_list}
print("maximum following count: ", [key for key,val in foll_count.items() if val == max(foll_count.values())])