안녕 코더 여러분!
이 문서에서는 로컬 및 원격 CSV 파일을 처리하고, 정보를 로드 및 인쇄하고, 나중에 열을 Django 유형에 매핑할 수 있는 오픈 소스 도구를 소개합니다. 일반적으로 데이터 세트가 커지고 사용자 정의 보고서가 Excel에서 지원되지 않거나 데이터 테이블을 통한 전체 데이터 조작이 지원되지 않는 경우 CSV 파일 처리가 필요하며 API가 필요합니다.
현재 기능 목록을 더욱 확장하여 CSV 파일을 데이터베이스 테이블/모델에 매핑하고 대시보드 웹 앱을 완전히 생성할 수 있습니다.
소스 코드: AppSeed 서비스의 CSV 프로세서 부분(오픈 소스)
코드와 사용법을 설명하기 전에 도구 기능을 요약해 보겠습니다.
CSV 파서는 README에 설명된 대로 프로젝트 소스를 복제하고 사용할 수 있게 만든 후 CLI를 통해 실행할 수 있습니다. 설치가 완료되면 다음 한 줄을 사용하여 CVS 프로세서를 호출할 수 있습니다.
$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect.json
이 도구는 다음 작업을 수행합니다.
로컬 및 원격 파일에도 동일하게 적용될 수 있습니다. 예를 들어, 다음 한 줄을 실행하여 악명 높은 Titanic.cvs를 분석할 수 있습니다.
$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect_distant.json # Output > Processing .\media\tool_inspect\csv_inspect_distant.json |-- file: https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv |-- type: csv Field CSV Type Django Types ----------- ---------- ------------------------------------------ PassengerId int64 models.IntegerField(blank=True, null=True) Survived int64 models.IntegerField(blank=True, null=True) Pclass int64 models.IntegerField(blank=True, null=True) Name object models.TextField(blank=True, null=True) Sex object models.TextField(blank=True, null=True) Age float64 models.FloatField(blank=True, null=True) SibSp int64 models.IntegerField(blank=True, null=True) Parch int64 models.IntegerField(blank=True, null=True) Ticket object models.TextField(blank=True, null=True) Fare float64 models.FloatField(blank=True, null=True) Cabin object models.TextField(blank=True, null=True) Embarked object models.TextField(blank=True, null=True) [1] - PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked [2] - 1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S [3] - 2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C [4] - 3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S [5] - 4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S [6] - 5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S [7] - 6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q [8] - 7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S [9] - 8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S [10] - 9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S ... (truncated output)
도구의 관련 부분은 다음과 같습니다.
정보를 로드하고 소스가 로컬인지 원격인지 사전 확인
print( '> Processing ' + ARG_JSON ) print( ' |-- file: ' + JSON_DATA['source'] ) print( ' |-- type: ' + JSON_DATA['type' ] ) print( '\n') tmp_file_path = None if 'http' in JSON_DATA['source']: url = JSON_DATA['source'] r = requests.get(url) tmp_file = h_random_ascii( 8 ) + '.csv' tmp_file_path = os.path.join( DIR_TMP, tmp_file ) if not file_write(tmp_file_path, r.text ): return JSON_DATA['source'] = tmp_file_path else: if not file_exists( JSON_DATA['source'] ): print( ' > Err loading SOURCE: ' + JSON_DATA['source'] ) return csv_types = parse_csv( JSON_DATA['source'] )
헤더를 분석하고 감지된 유형을 Django 유형에 매핑합니다.
테이블 형식 보기에는 Tabulate 라이브러리가 사용됩니다.
csv_types = parse_csv( JSON_DATA['source'] ) #pprint.pp ( csv_types ) table_headers = ['Field', 'CSV Type', 'Django Types'] table_rows = [] for t in csv_types: t_type = csv_types[t]['type'] t_type_django = django_fields[ t_type ] table_rows.append( [t, t_type, t_type_django] ) print(tabulate(table_rows, table_headers))
마지막 단계는 CSV 데이터 인쇄입니다.
csv_data = load_csv_data( JSON_DATA['source'] ) idx = 0 for l in csv_data: idx += 1 print( '['+str(idx)+'] - ' + str(l) ) # Truncate output .. if idx == 10: print( ' ... (truncated output) ' ) break
이 시점에서 코드는 Django의 CSV 정보, 데이터 유형 및 해당 데이터 유형에 대한 액세스를 제공합니다. Flask, Express 또는 NextJS와 같은 프레임워크에 대해 매핑을 쉽게 확장할 수 있습니다.
Django의 유형 매핑은 다음과 같습니다.
# Pandas Type django_fields = { 'int' : 'models.IntegerField(blank=True, null=True)', 'integer' : 'models.IntegerField(blank=True, null=True)', 'string' : "models.TextField(blank=True, null=True)", 'string_unique' : "models.TextField(blank=True, null=False, unique=True)", 'object' : "models.TextField(blank=True, null=True)", 'object_unique' : "models.TextField(blank=True, null=False, unique=True)", 'int64' : 'models.IntegerField(blank=True, null=True)', 'float64' : 'models.FloatField(blank=True, null=True)', 'bool' : 'models.BooleanField(null=True)', }
이 도구는 현재 개발 중이며 다음 단계는 다음과 같습니다.
읽어주셔서 감사합니다!
기여에 관심이 있는 분들은 새로운 AppSeed 플랫폼에 가입하고 Discord에서 커뮤니티와 연결하세요.
위 내용은 CSV - Python에서 로컬 및 원격 파일 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!