2016-01-14 3 views
0

Я пытаюсь прочитать файл csv. В приведенном ниже коде, цикл не вводится и исключение не брошено:Не удается прочитать файл 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, я перезаписал csvfile своим кодом. Во-вторых, измените код, как показывает @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

я попытался прочитать файл 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 

`

Смежные вопросы