Python 协助计算文件中的数字

Python 协助计算文件中的数字,python,Python,我试图将列表中的值设置为文件中0-9的出现次数。我不确定我在哪里搞砸了,因为运行代码后,列表仍然是0 def main(): intro() inFile = getFile() file, outfile = convertName(inFile) alist, count = countLines(file, outfile) printResults(alist, count, outfile) def intro(): print()

我试图将列表中的值设置为文件中0-9的出现次数。我不确定我在哪里搞砸了,因为运行代码后,列表仍然是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()
在:

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

alist[i] += 1

如果您只需要这些计数(不需要计数),请使用
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

alist[i]=alist[i+1]
应该是
alist[i]=alist[i]+1
alist=[v表示k,v表示已排序(列表(collections.Counter(filter)(lambda c:c.isdigit(),itertools.chain.from_iterable(file)).items()),key=lambda(a,b):int(a))]
如果ch==i:则在
内放置一个
打印文件
,并确保您的程序已进入其中。如果不是,逻辑程序是错误的。@ USER 3015970,请考虑对GnbBules的答案进行投票,如果它对你有帮助。
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