协助计算文件中的数字

时间:2013-11-21 06:31:45

标签: python

我试图将列表中的值设置为文件中出现的0-9。我不知道我搞砸了哪里因为在运行代码后,alist仍然是0。

def main():
    intro()
    inFile = getFile()
    file, outfile = convertName(inFile)
    alist, count = countLines(file, outfile)
    printResults(alist, count, outfile)

def intro():
    print()
    print("Program to count letters in each line")
    print("in a file.")
    print("You will enter the name of a file.")
    print("The program will create an output file.")
    print("Written by .")
    print()
def getFile():
    inFile = input("Enter name of input file:  ")
    return inFile
def convertName(inFile):
    file = open(inFile, "r")
    outfile = (inFile.replace(".txt", ".out"))
    return file, outfile
def countLines(file, outfile):
    outfile = open(outfile, "w")
    alist = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    count = 0
    for line in file:
        count = count + 1
        spl = line.split()       
        for i in range(0,10):
            for ch in spl:
                if ch == i:
                    alist[i] = alist[i+1]
    return alist, count
def printResults(alist, count, outfile):
    print("The name of output file is", outfile)
    print()
    print("Number of lines:          ", count)
    t = 0
    print(alist)
main()

3 个答案:

答案 0 :(得分:1)

在:

alist[i] = alist[i+1]

您要将元素0分配给alist[i]。您可能想要执行以下操作:

alist[i] += 1

答案 1 :(得分:1)

    for i in range(0,10):
        for ch in spl:
            if ch.isdigit() and int(ch) == i:
                alist[i] += 1

答案 2 :(得分:0)

如果您只想要这些计数(不计算数字),请使用collections.Counter

from collections import Counter
def count_digits(file_name):
    with open(fn):
        c = Counter([int(character) for character in open(fn).read() if character.isdigit()])
    return [c.get(i,0) for i in range(10)]

如果你还想要行数,请稍微扩展一下方法:

from collections import Counter
def count_digits(file_name):
    with open(fn) as fh:
        c = Counter([int(character) for character in fh.read() if character.isdigit()])
        digit_counts = [c.get(i,0) for i in range(10)]
        fh.seek(0)
        lines_count = sum(1 for line in fh)
    return digit_counts, line_counts