我有一个用逗号分隔的CSV文件。我需要读取文件,确定哪些行包含一个需要高于给定数字的数字(比如711),并计算符合条件的那些数字的百分比。
到目前为止我的代码如下:
myfile = open('3517315a.csv','r')
myfilecount = 0
linecount = 0
firstline = True
for line in myfile:
if firstline:
firstline = False
continue
fields = line.split(',')
linecount += 1
count = int(fields[0])
colour = str(fields[1])
channels = int(fields[2])
code = str(fields[3])
correct = str(fields[4])
reading = float(fields[5])
print( 'percentage of numbers greater than or equal to 711 is %d:')
我不知道如何设置条件然后计算百分比。
答案 0 :(得分:0)
您可以使用awk命令执行此操作: -
cat 3517315a.csv | awk -F ',' 'BEGIN{count=0;total=0;}{total++;if($1>=711)count++;}END{print 100*count/total}'
说明: -
awk -F ','
- 指定字段分隔符
BEGIN{count=0;total=0;}
- 首次初始化变量。
{total++;if($1>=711)count++;}
- 对文件中的每一行执行。对于每一行,total递增,对于那些> = 711,计数递增。
END{print 100*count/total}
- 在解析所有行之后执行。 Percentage=count*100/total
答案 1 :(得分:0)
假设您只对第一个字段(计数)进行计数感兴趣,那么代码可以是:
MAGIC_NUMBER = 711
counter = 0
myfile = open('3517315a.csv', 'r')
myfile.readline() # Skip the first line
for i, line in enumerate(myfile, 1):
count = int(line.split(',')[0])
if count >= MAGIC_NUMBER:
counter += 1
percentage = float(counter) / i * 100
print('%3.2f%% of numbers is >= %d' % (percentage, MAGIC_NUMBER))
您可以使用enumerate
自动获取一系列数字,在这种情况下,从1开始从line
读取每个myfile
。
因为我们只对第一个字段感兴趣,并且我们知道split
方法返回一个列表,所以我们只取第一个元素(索引0)。我们将此号码转换为数字(int
)。
然后你需要根据给定的条件计算这些数字。
我们处理完文件后,i
会保留最后读取的行数。所以我们可以计算百分比。请注意在其中一个数字中使用float
。这是告诉操作员/
我们想要float
作为结果。