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