【问题标题】:Python if statement using CSV Data使用 CSV 数据的 Python if 语句
【发布时间】:2014-08-04 03:35:07
【问题描述】:

我正在从 CSV 文件中读取一些数据,然后根据 if 语句打印一个值,但这对我来说似乎没有意义。我希望它会打印equal to 1

Python 代码:

import csv

#open CSV file
csvfile = open("C:\\python.csv", "rb")
data = csv.reader(csvfile)
data = [row for row in data]

#start loop through each item
for currentrow in range(1, 2):  # numbers off due to array starting at 0
    #grab one record data [row][col]
    Count = data[currentrow][7]

    print "Count equals: " + Count

    if Count > 1:
        print "greater than 1"
    if Count == 1:
        print 'equal to 1'

输出:

Count equals: 1.00
greater than 1

【问题讨论】:

  • 在你的 for 循环中尝试Count = int(float(data[currentrow][7]))
  • @inspectorG4dget 您可能应该将其发布为答案。看起来合乎逻辑。
  • 旁白:如果您是初学者,我强烈建议您使用 Python 3。它不仅有很多全面的改进,而且您会看到一个非常有用的错误消息。
  • @alecxe:检查以确保这确实是 OP 想要的。还有我不完全理解的range(1,2) 的问题。所以很难说我的建议是否真的解决了一般情况下的问题
  • @inspectorG4dget 这很好用,但现在print "Count equals: " + Count 行不起作用,因为它结合了一个数字和一个字符串。我需要转换回字符串来打印吗?如果需要,怎么办?

标签: python python-2.7 csv


【解决方案1】:

您的麻烦源于您从文件中读取的内容始终是字符串(即str 类型)。这意味着即使文件包含一个数字,它也会作为字符串读入您的变量。因此,如果您的文件如下所示:

myFile.txt

2

如果你这样做了:

with open('myFile.txt') as infile:
    x = infile.readline()

那么,x 将具有值'2',这是一个str 类型。这意味着,如果您执行x*2,您将得到'22',因为这就是字符串相乘的方式。

您真正想要的是将刺痛转换为int。这称为“将字符串转换为整数”,可以非常简单地完成:

y = int(x)

您应该注意另一种类型:float。它用于保存十进制数字。所以,如果你说

x = 3.4

那么x 将是float。您也可以将ints 转换为floats:

z = float(y)

会将z 转换为浮点数,值为2.0

现在,谈谈你的实际问题:

data = [row for row in data]  # data is now a list of lists; each sublist is a list of strings
for currentrow in range(1,2):
    Count = data[currentrow][7]  # Count is now the string at index 7, of the sublist at index `currentrow`, i.e. 1.00
    Count = float(Count)  # Count is now the floating point value of the string '1.00'
    Count = int(Count)  # Count is now the integer value of 1.00, i.e. 1
    if Count > 1:
        print "greater than 1"
    if Count == 1:
        print "equal to 1"

现在,你的第二个问题:

print 'Count equals ' + Count

在这里,您尝试添加strint。好吧,这些是不兼容的添加类型。因此,您应该将int 转换为str;就像strs 可以转换为ints 一样,ints 可以通过调用str() 转换为strs:

Count_str = str(Count)

所以当你想打印值时,你可以这样做:

print "Count equals " + str(Count)

当然,print 语句更友好一些,可以让你做这样的事情:

print "Count equals", Count  # no casting needed here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2015-11-25
    • 2018-11-12
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多