[PYTHON] 장고 모델로 csv 데이터를 가져 오는 방법
PYTHON장고 모델로 csv 데이터를 가져 오는 방법
일부 CSV 데이터가 있고 예제 CSV 데이터를 사용하여 장고 모델로 가져 오려고합니다.
1;"02-01-101101";"Worm Gear HRF 50";"Ratio 1 : 10";"input shaft, output shaft, direction A, color dark green";
2;"02-01-101102";"Worm Gear HRF 50";"Ratio 1 : 20";"input shaft, output shaft, direction A, color dark green";
3;"02-01-101103";"Worm Gear HRF 50";"Ratio 1 : 30";"input shaft, output shaft, direction A, color dark green";
4;"02-01-101104";"Worm Gear HRF 50";"Ratio 1 : 40";"input shaft, output shaft, direction A, color dark green";
5;"02-01-101105";"Worm Gear HRF 50";"Ratio 1 : 50";"input shaft, output shaft, direction A, color dark green";
나는 Product라는 Django 모델을 가지고있다. 제품에는 이름, 설명 및 가격과 같은 몇 가지 필드가 있습니다. 나는 이런 것을 원한다.
product=Product()
product.name = "Worm Gear HRF 70(02-01-101116)"
product.description = "input shaft, output shaft, direction A, color dark green"
product.price = 100
해결법
-
==============================
1.파이썬 언어의 일부인 csv 모듈을 사용하기를 원하며 Django의 get_or_create 메소드를 사용해야합니다.
파이썬 언어의 일부인 csv 모듈을 사용하기를 원하며 Django의 get_or_create 메소드를 사용해야합니다.
with open(path) as f: reader = csv.reader(f) for row in reader: _, created = Teacher.objects.get_or_create( first_name=row[0], last_name=row[1], middle_name=row[2], ) # creates a tuple of the new object or # current object and a boolean of if it was created
예제에서 모델 교사는 first_name, last_name 및 middle_name이라는 세 가지 속성을가집니다.
get_or_create 메소드에 대한 장고 문서
-
==============================
2.라이브러리를 사용하려면 csv 및 django에 대한 빠른 Google 검색을 통해 django-csvimport 및 django-adapters라는 두 개의 라이브러리가 나타납니다. 자기가하는 말을 읽어 봅시다 ...
라이브러리를 사용하려면 csv 및 django에 대한 빠른 Google 검색을 통해 django-csvimport 및 django-adapters라는 두 개의 라이브러리가 나타납니다. 자기가하는 말을 읽어 봅시다 ...
첫 번째 방법은 csv 파일과 일치하는 모델을 작성해야하지만 두 번째 방법은 명령 행 가져 오기 도구를 사용하는 것입니다.이 방법은 사용자가 작업하는 방식에 큰 차이가 있으며 각기 다른 유형의 프로젝트에 유용합니다.
그래서 어느 것을 사용할 것인가? 그 중 어느 것이 장기적으로 프로젝트에 더 잘 맞는지에 따라 다릅니다.
그러나 csv 파일을 가져 오는 자신의 django 스크립트를 작성하여 (경고, 의사 코드 앞) 다음 줄을 따라 라이브러리를 모두 피할 수도 있습니다.
# open file & create csvreader import csv, yada yada yada # import the relevant model from myproject.models import Foo #loop: for line in csv file: line = parse line to a list # add some custom validation\parsing for some of the fields foo = Foo(fieldname1=line[1], fieldname2=line[2] ... etc. ) try: foo.save() except: # if the're a problem anywhere, you wanna know about it print "there was a problem with line", i
그것은 아주 쉽다. 지옥, 당신은 한 번 가져 오기 경우 장고 껍질을 통해 그것을 대화 형으로 할 수 있습니다. 프로젝트로 무엇을하고 싶은지, 몇 개의 파일을 처리해야하는지, 그리고 라이브러리를 사용하기로 결정했다면, 어느 것이 더 적합한 지 파악해보십시오.
-
==============================
3.Python CSV 라이브러리는 구문 분석을 수행 할 수 있으며 코드는 Products ()로 변환 할 수 있습니다.
Python CSV 라이브러리는 구문 분석을 수행 할 수 있으며 코드는 Products ()로 변환 할 수 있습니다.
-
==============================
4.django-adapter를 사용할 수도 있습니다.
django-adapter를 사용할 수도 있습니다.
>>> from adaptor.model import CsvModel >>> class MyCSvModel(CsvModel): ... name = CharField() ... age = IntegerField() ... length = FloatField() ... ... class Meta: ... delimiter = ";"
다음과 같이 CSV 파일과 일치하는 MyCsvModel을 선언합니다.
안토니; 27; 1.75
파일이나 반복 가능한 객체를 가져 오려면 다음을 수행하십시오.
>>> my_csv_list = MyCsvModel.import_data(data = open("my_csv_file_name.csv")) >>> first_line = my_csv_list[0] >>> first_line.age 27
명시 적 선언이 없으면 데이터와 열이 같은 순서로 일치합니다.
Anthony --> Column 0 --> Field 0 --> name 27 --> Column 1 --> Field 1 --> age 1.75 --> Column 2 --> Field 2 --> length
-
==============================
5.이 같은:
이 같은:
f = open('data.txt', 'r') for line in f: line = line.split(';') product = Product() product.name = line[2] + '(' + line[1] + ')' product.description = line[4] product.price = '' #data is missing from file product.save() f.close()
-
==============================
6.django-csv-importer 패키지를 사용할 수 있습니다. http://pypi.python.org/pypi/django-csv-importer/0.1.1
django-csv-importer 패키지를 사용할 수 있습니다. http://pypi.python.org/pypi/django-csv-importer/0.1.1
그것은 장고 모델처럼 작동합니다.
MyCsvModel(CsvModel): field1 = IntegerField() field2 = CharField() etc class Meta: delimiter = ";" dbModel = Product
그리고 당신은 단지해야합니다 : CsvModel.import_from_file ( "내 파일")
그러면 제품이 자동으로 생성됩니다.
-
==============================
7.내가 사용하는 장고 1.8의 경우,
내가 사용하는 장고 1.8의 경우,
나는 당신이 미래에 동적으로 객체를 생성 할 수 있다는 명령을 내렸지 만, 그래서 당신은 csv의 파일 경로, 모델 이름, 관련 django 응용 프로그램의 응용 프로그램 이름을 넣을 수 있으며 필드 이름을 지정하지 않고 관련 모델을 채 웁니다. 예를 들어 다음 csv :
field1,field2,field3 value1,value2,value3 value11,value22,value33
객체를 생성합니다. [{필드 1 : 값 1, 필드 2 : 값 2, 필드 3 : 값 3}, {필드 1 : 값 11, 필드 2 : 값 22, 필드 3 : 값 33} 명령에 입력 할 모델 이름을 입력하십시오.
명령 코드 :
from django.core.management.base import BaseCommand from django.db.models.loading import get_model import csv class Command(BaseCommand): help = 'Creating model objects according the file path specified' def add_arguments(self, parser): parser.add_argument('--path', type=str, help="file path") parser.add_argument('--model_name', type=str, help="model name") parser.add_argument('--app_name', type=str, help="django app name that the model is connected to") def handle(self, *args, **options): file_path = options['path'] _model = get_model(options['app_name'], options['model_name']) with open(file_path, 'rb') as csv_file: reader = csv.reader(csv_file, delimiter=',', quotechar='|') header = reader.next() for row in reader: _object_dict = {key: value for key, value in zip(header, row)} _model.objects.create(**_object_dict)
어쩌면 최신 버전에서
from django.db.models.loading import get_model
더 이상 사용되지 않으며 다음으로 변경해야합니다.
from django.apps.apps import get_model
-
==============================
8.다음은 장고 달걀입니다.
다음은 장고 달걀입니다.
장고 - csvimport
-
==============================
9.장고에 내장 된 디시리얼라이저의 사용을 고려하십시오. Django의 문서는 잘 작성되어 있으며 시작하는 데 도움이 될 수 있습니다. 데이터를 csv에서 XML 또는 JSON으로 변환하고 데시리아 이어를 사용하여 데이터를 가져 오는 것이 좋습니다. 웹 요청이 아닌 명령 줄에서이 작업을 수행하는 경우 loaddata manage.py 명령이 특히 유용합니다.
장고에 내장 된 디시리얼라이저의 사용을 고려하십시오. Django의 문서는 잘 작성되어 있으며 시작하는 데 도움이 될 수 있습니다. 데이터를 csv에서 XML 또는 JSON으로 변환하고 데시리아 이어를 사용하여 데이터를 가져 오는 것이 좋습니다. 웹 요청이 아닌 명령 줄에서이 작업을 수행하는 경우 loaddata manage.py 명령이 특히 유용합니다.
-
==============================
10.Pandas 라이브러리를 사용하여 csv 데이터의 데이터 프레임을 만듭니다. csv 파일의 첫 번째 줄 또는 코드에서 데이터 프레임의 columns 메서드를 사용하여 필드의 이름을 지정합니다. 그런 다음 모델 인스턴스 목록을 작성하십시오. 마지막으로 django 메서드 인 .bulk_create ()를 사용하여 모델 인스턴스 목록을 데이터베이스 테이블로 보냅니다.
Pandas 라이브러리를 사용하여 csv 데이터의 데이터 프레임을 만듭니다. csv 파일의 첫 번째 줄 또는 코드에서 데이터 프레임의 columns 메서드를 사용하여 필드의 이름을 지정합니다. 그런 다음 모델 인스턴스 목록을 작성하십시오. 마지막으로 django 메서드 인 .bulk_create ()를 사용하여 모델 인스턴스 목록을 데이터베이스 테이블로 보냅니다.
pandas의 read_csv 함수는 csv 파일을 읽는 데 유용하며 줄 건너 뛰기, 필드 생략 등의 많은 매개 변수를 제공합니다.
import pandas as pd tmp_data=pd.read_csv('file.csv',sep=';') #ensure fields are named~ID,Product_ID,Name,Ratio,Description #concatenate name and Product_id to make a new field a la Dr.Dee's answer products = [ Product( name = tmp_data.ix[row]['Name'] description = tmp_data.ix[row]['Description'], price = tmp_data.ix[row]['price'], ) for row in tmp_data['ID'] ] Product.objects.bulk_create(products)
mmrs151에 의해 답변을 사용하고 있었지만 각 행 (인스턴스)을 저장하는 것은 매우 느리고 구분 기호 (심지어 따옴표 포함)가 포함 된 필드는 open () - line.split ( ';') 메서드에 의해 처리되지 않았습니다.
판다에는 많은 유용한 경고가 있습니다. 알아 둘 가치가 있습니다.
-
==============================
11.django-import-export를 시도해 볼 수 있습니다. 그것은 좋은 관리자 통합, 미리보기 변경, 생성, 업데이트, 삭제 개체 수 있습니다.
django-import-export를 시도해 볼 수 있습니다. 그것은 좋은 관리자 통합, 미리보기 변경, 생성, 업데이트, 삭제 개체 수 있습니다.
-
==============================
12.당신이 장고 (> 10)의 새로운 버전을 사용하고 있고 모델 정의를 작성하는데 시간을 낭비하고 싶지 않다면. ogrinspect 도구를 사용할 수 있습니다.
당신이 장고 (> 10)의 새로운 버전을 사용하고 있고 모델 정의를 작성하는데 시간을 낭비하고 싶지 않다면. ogrinspect 도구를 사용할 수 있습니다.
그러면 모델에 대한 코드 정의가 작성됩니다.
python manage.py ogrinspect [/path/to/thecsv] Product
출력은 클래스 (모델) 정의가됩니다. 이 경우 모델을 Product라고합니다. 이 코드를 models.py 파일에 복사해야합니다.
그 다음에는 쉘을 사용하여 새 Product 테이블을 다음과 같이 마이그레이션해야합니다.
python manage.py makemigrations python manage.py migrate
자세한 내용은 여기 : https://docs.djangoproject.com/en/1.11/ref/contrib/gis/tutorial/
이 예제는 ESRI Shapefiles에 대해 수행되었지만 표준 CSV 파일에서도 잘 작동합니다.
데이터를 수집 (CSV 형식)하려면 팬더를 사용할 수 있습니다.
import pandas as pd your_dataframe = pd.read_csv(path_to_csv) # Make a row iterator (this will go row by row) iter_data = your_dataframe.iterrows()
이제는 모든 행을 사전으로 변환하고이 사전을 사용하여 모델을 인스턴스화해야합니다 (이 경우 Product ()).
# python 2.x map(lambda (i,data) : Product.objects.create(**dict(data)),iter_data
지금 데이터베이스를 확인하십시오.
-
==============================
13.models.py에 클래스를 정의하고 그 안에 함수를 정의하십시오.
models.py에 클래스를 정의하고 그 안에 함수를 정의하십시오.
class all_products(models.Model): def get_all_products(): items = [] with open('EXACT FILE PATH OF YOUR CSV FILE','r') as fp: # You can also put the relative path of csv file # with respect to the manage.py file reader1 = csv.reader(fp, delimiter=';') for value in reader1: items.append(value) return items
목록의 i 번째 요소는 items [i]
from https://stackoverflow.com/questions/2459979/how-to-import-csv-data-into-django-models by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 범위 (시작, 끝)에 끝이 포함되지 않는 이유는 무엇입니까? (0) | 2018.10.03 |
---|---|
[PYTHON] matplotlib에서 밀도로 채색 된 분산 형 플롯을 만들려면 어떻게해야합니까? (0) | 2018.10.03 |
[PYTHON] 두 세그먼트가 교차하는지 어떻게 확인할 수 있습니까? (0) | 2018.10.03 |
[PYTHON] 파이썬 함수를 피클 링하는 쉬운 방법이 있습니까? 아니면 코드를 직렬화할까요? (0) | 2018.10.03 |
[PYTHON] 파이썬에서 두 개의 사전 비교하기 (0) | 2018.10.03 |