繁体   English   中英

Python:ValueError:以10为底的int()的无效文字:“”

[英]Python: ValueError: invalid literal for int() with base 10: '"'

我正在创建代码以获取CSV文件中的平均分数。

CSV文件如下所示:

5 Ser15

4 Ser15

3 Ser15

第一列是分数,第二列是用户名。

到目前为止,这是我的代码:

   def av():
    with open("SciMedreport.csv","r") as f:
        average = 0
        Sum = 0
        row_count = 0
        for row in f:
            column = row.split(',')
            i=(int(column[0]))
            Sum += i
            row_count += 1
        average = Sum / row_count
        return 'The average is:', average
  av()

但是出现此错误...

  i=int(column[0])
ValueError: invalid literal for int() with base 10: '"'

当我打印整行进行检查时,将显示:

def av():
with open("SciMedreport.csv","r") as f:
    average = 0
    Sum = 0
    row_count = 0
    for row in f:
        print(row)
av()

结果如下:

5,Ser15
""

5,Ser15

""

4,Ser15

任何人都知道解决此问题的方法,或计算平均值的另一种方法?

当您尝试用','分割行时,因为没有,整个字符串将被返回并且尝试将其转换为int()给您错误,请尝试使用''

我可以在代码中看到几个错误。

for row in f:
(1)    for column in row.split(','):
(2)            i=(int(column))
            Sum += i
        row_count += 1
(3)    average = Sum / len(column)

(1)拆分行时,您得到的基本上是一个数组/列表。 在您的情况下,它将为['5', 'Ser15] 而不是for循环,您可能想要更改代码,如下所示:

for row in f:
    columns_list = row.split(',')
    i=(int(columns_list[0]))
    Sum += i
    row_count += 1
average = Sum / row_count

(2)现在您无法将列表转换为整数。 您可能感兴趣的是i = int(column[0])即列表中的第一个数字,即CSV文件的第一列。

(3)您想找到所有行的平均值,对吗? 它不是average = Sum / row_count吗?

def av():
    with open("SciMedreport.csv","r") as f:
        average = 0
        Sum = 0
        row_count = 0
        divisor = 0
        for row in f:
            row_count += 1
            if row_count%2 == 0: # if it doesn't work, try changing to 1
                # print(row.split(','))
                divisor += 1
                # write rest of the code here, Sum += i etc.
                columns_list = row.split(',')
                i = int(columns_list[0])
                Sum += i
        average = Sum / divisor
def av():
    with open("SciMedreport.csv","r") as f:
        average = 0
        Sum = 0
        row_count = 0
        divisor = 0
        for row in f:
            row_count += 1
            if row_count%2 == 0: # if it doesn't work, try changing to 1
                # print(row.split(','))
                divisor += 1
                # write rest of the code here, Sum += i etc.
                columns_list = row.split(',')
                i = int(columns_list[0])
                Sum += i
        average = Sum / divisor

谢谢user3903448!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM