2016-01-14 240 views
0

我正在嘗試讀取csv文件。在下面的代碼中,不會輸入for循環,也不會引發異常:無法讀取csv文件

csvfile = r"C:\Development\input-data\Locations.csv" 
try: 
    with open(csvfile, 'r') as csvfile: 
     reader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
     for row in reader: 
      #print ("row: " + str(row)) 
      print (', '.join(row)) 
except IOError: 
    print ("IOError: " + csvFile) 
    sys.exit() 

我在做什麼錯?

編輯: 錯誤是2部分。首先,正如@bernie所說,我用我的代碼覆蓋了csv文件。其次,將@KarenClark顯示的代碼更改。

+3

你覆蓋'csvfile' ... – bernie

+0

如果CSV文件是空就會發生這種情況。 – tdelaney

+0

正如@bernie所說,您正在覆蓋csvfile變量。我不確定這是行不通的,但它確實是一個「壞主意」(tm)。另外,什麼是「cvsFile」。最後,請發佈您的csv文件的確切格式(例如第一行或典型的行)。 –

回答

3

我沒有足夠的排名發表評論,所以我不得不「答案」

首先,你可以張貼整個代碼段,包括進口,所以我們可以看到,如果這是個問題?

第二,如果你申報「打開方式」一節中的CSV文件,這樣會發生什麼:

try: 
    with open(r'C:\Development\input-data\Locations.csv', 'rb') as csvfile: 
     reader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
     for row in reader: 
      print (', '.join(row)) 
except IOError: 
    print ("IOError: " + csvFile) 
    sys.exit() 
+0

是的,我知道提到循環內的csvfile值不是Pythonic,但是目標是看看是否改變了變量的位置。另一位評論者正確地說csvfile被新變量覆蓋 - 如果以上工作正常,那就證明了這一點。 –

0

我嘗試使用for循環,如果其他條件來讀取csv文件。 似乎太大 但它對我來說是... 試試吧。

import sys 
f1 =open("csv_file.csv") 
def splitter(f1): 
    f2 = f1.readlines() 
    check = 0 
    check1 = 0 
    x ="" 
    y ="" 
    temp=[] 
    for row in f2: 
     if row.find('"')!= -1: 
     for i in row: 
      if i == '"': 
       check = check+1 
       if (check)%2 == 0: 
        temp.append(x) 
        x="" 
       continue 
      if (check)%2 != 0: 
       x = x+i 
       continue 
      if i == ',': 
       check1= check1+1 
       if (check1)>= 2: 
        if y=="": 
         continue 
        temp.append(y) 
        y="" 
       continue 
      if i=='\n': 
       y = y+i 
       temp.append(y) 
       y="" 
       continue 
      if (check1)>=1: 
       y = y+i 
       continue 
      if i=="": 
       continue 
     for s in temp: 
      print s 
     temp=[] 
    else: 
     z= row.split(',') 
     for a in z: 
      print a 

def main(argv): 
    splitter(f1) 

if __name__ == "__main__": 
    try: 
    main(sys.argv) 
except KeyboardInterrupt: 
    pass 

`