DictReader, без кавычек, файл с вкладками
У меня есть файл csv, который выглядит так:
Обратите внимание: кавычки отсутствуют, вкладка (\ t) является разделителем, и между заголовком и фактическим содержимым есть пустая строка.
Facility No Testing No Name Age
252 2351 Jackrabbit, Jazz 15
345 257 Aardvark, Ethel 41
Я думаю, что я пробовал почти все возможные комбинации идей и параметров
f = open('/tmp/test', 'r')
csvFile = f.read()
reader = csv.DictReader(csvFile, delimiter='\t', quoting=csv.QUOTE_NONE)
print reader.fieldnames
результат печати:
['F']
Как я могу получить это во что-то, что я могу проанализировать, чтобы поместить в базу данных?
Быть в словаре было бы полезно.
Ответы
Ответ 1
Каков ваш csvFile
? Является ли это строкой, представляющей ваше имя файла, начиная с "F"?
csv.DictReader
требуется открытый файловый объект, а не имя файла.
Try:
with open(csvFile, 'rb') as f:
reader = csv.DictReader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
print reader.fieldnames
ИЗМЕНИТЬ
Если ваш csvFile
- это строка, содержащая все данные, вам нужно будет преобразовать ее в StringIO
(потому что csv
может иметь доступ только к файлам, а не к строкам).
Try:
from cStringIO import StringIO
# csvFile = 'Facility No\tTesting No\tName\tAge\n\n252\t2351\tJackrabbit, Jazz\t15\n345\t257\tAardvark, Ethel\t41\n'
reader = csv.DictReader(StringIO(csvFile), delimiter='\t', quoting=csv.QUOTE_NONE)
print reader.fieldnames
Или, если ваш отредактированный вопрос открывается и читает файл:
with open('/tmp/test', 'rb') as f:
reader = csv.DictReader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
print reader.fieldnames
Это работает для меня.
Ответ 2
это может сработать для вас, по крайней мере, в начале:
>>> import csv
>>> input = open('/tmp/csvtemp.csv')
>>> csvin = csv.reader(input, delimiter='\t')
>>> data = [row for row in csvin]
>>> header = data.pop(0)
>>> data.pop(0) # skip blank line
[]
>>> for row in data:
... rowdict = dict(zip(header, row))
... print rowdict
...
{'Age': '15', 'Testing No': '2351', 'Name': 'Jackrabbit, Jazz', 'Facility No': '252'}
{'Age': '41', 'Testing No': '257', 'Name': 'Aardvark, Ethel', 'Facility No': '345'}
Ответ 3
Из комментариев Я понимаю, что вы получаете свои данные через urllib2
. response
- файл-подобный объект; вы можете передать его прямо на csv.DictReader
:
response = urllib2.urlopen(URL)
reader = csv.DictReader(response, dialect=csv.excel_tab)