Модуль CSV python не печатает ничего из файла csv

#python #csv

#python #csv

Вопрос:

Я хочу прочитать данные из файла CSV, но в моем выводе указано, что значения полей в строках «Отсутствуют». Он не распознает значения в моем файле CSV.

Есть идеи?

Вот код, который я использую :

 import arcpy
import csv
arcpy.env.workspace = "D:"
csvfile             = "D:/file.csv"
domains = []
rows = []

with open(csvfile, 'r') as csvfile:
     reader = csv.DictReader(csvfile)
     for row in reader:
     try:
        domains.append(row.get('domain'))
        rows.append(row)
    except KeyError:
       rows = [row]

domains = list(set(domains))
print("Identified %s unique domains" % len(domains))
print("Identified %s codes" % len(rows))


print("Creating codes:")
for row in rows:
    print("%st%st%s" % (row.get('domain'), row.get('code'), row.get('code_description')))
   
  

Вот пример моего csv-файла, очень простой и с разделителями табуляции.введите описание изображения здесь

И вот результат, который я получаю : введите описание изображения здесь

Вот печать строк: введите описание изображения здесь

Комментарии:

1. Пожалуйста, исправьте отступ. Кроме того, вы можете захотеть преобразовать domains в набор с самого начала вместо добавления в список.

2. some_dict.get('some_key') никогда не вызовет a KeyError , он вернется None , если не сможет его найти. попробуйте заменить его на domains.append(row['domain']) .

3. синтаксическая ошибка…

Ответ №1:

Помимо проблем с отступами, попробуйте выполнить следующую модификацию:

 import arcpy
import csv
arcpy.env.workspace = "D:"
csvfile             = "D:/file.csv"
domains = set()
rows = []

with open(csvfile, 'r') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';')
    for row in reader:
        try:
            domains.add(row['domain'])
            rows.append(row)
        except KeyError:
            print("Couldn't parse", row)

print("Identified %s unique domains" % len(domains))
print("Identified %s codes" % len(rows))


print("Creating codes:")
for row in rows:
    print("%st%st%s" % (row.get('domain'), row.get('code'), row.get('code_description')))
  

Комментарии:

1. Спасибо, но где-то в вашем коде есть синтаксическая ошибка

2. @Mar версия python?

3. это python27

4. Поддержка Python 2.7 была прекращена к январю 2020 года, вам определенно следует перейти на python 3. Я отредактировал его, чтобы удалить добавление python 3.6 (сейчас мы находимся в стабильной версии 3.8), f-strings.

5. да, вы правы, я должен в конечном итоге обновиться до python 3. следовательно, ваши обновления не работают, теперь мой csv реагирует как пустой, никаких результатов вообще!