Skip to main content
 首页 » 编程设计

Python迭代不进入if-elif

2025年05月04日12bluestorm

如果这是一个非常简单的问题,请原谅我。我已经在这几个小时了。我正在尝试每行读取一个 csv 文件。但是在最后一行,我不希望它附加任何“,”,这就是为什么我在 if-elif 语句中将问题分开。

我不确定这是否只是我困了,但我似乎无法解决这个简单的问题。当我打印出 print (iter, row_count , iter < row_count) 时,它还没有进入任何状态我 100% 确定最后一行是 False。

   #read csv 
   data = csv.reader(open(csvFile, 'rb'), dialect='excel') 
 
   reader = csv.reader(open(csvFile, 'r'), delimiter=",") 
   tempData = list(reader) 
   row_count = len(tempData) 
 
 
   #geojson template 
   template = \ 
      '''\ 
      { 
        "type" : "Feature", 
        "id" : "%s", 
        "geometry" : { 
            "type" : "Point", 
            "coordinates" : [%s, %s] 
        }, 
        "properties" : { 
            "name" : "%s" 
         } 
      } 
      ''' 
 
#head of geojson 
output = \ 
    ''' 
{ "type" : "FeatureCollection", 
    "features" : [ 
    ''' 
 
#loop in csv 
    iter = 0 
 
    for row in data: 
        iter += 1 
        print (iter, row_count , iter < row_count) 
        if (iter < row_count == True): 
            print("TRUE") 
            id = row[0] 
            name = row[1] 
            latitude = row[2] 
            longitude = row[3] 
            output += template % (row[0], row[3], row[2], row[1]) 
            output += "," 
            print (output) 
        elif (iter < row_count == False): 
            print("FALSE") 
            id = row[0] 
            name = row[1] 
            latitude = row[2] 
            longitude = row[3] 
            output += template % (row[0], row[3], row[2], row[1]) 
            print (output) 
 #tail of geojson 
output += \ 
    '''\ 
    ] 
} 
    ''' 
 
#open geojson file to write output 
outFileHandler = open(geojsonFilePath, 'w') 
outFileHandler.write(output) 
 
print("Converted to geoJSON") 
outFileHandler.close() 

请您参考如下方法:

iter < row_count == True 

和

iter < row_count == False 

不要做你认为他们做的事。

Python 语法允许 chaining of comparisons , 所以像

a < x < b 

相当于

(a < x) and (x < b) 

这是一个非常方便的功能,但它意味着您的 iter < row_count == True相当于

(iter < row_count) and (row_count == True) 

所以你应该改变if声明

if iter < row_count: 

并更改 elif平原else: