Helo pengekod!
Artikel ini membentangkan alat sumber terbuka yang mampu memproses fail CSV setempat dan jauh, memuatkan dan mencetak maklumat, dan kemudian memetakan lajur kepada Jenis Django. Memproses fail CSV biasanya diperlukan apabila set data menjadi besar, laporan tersuai tidak disokong oleh Excel atau manipulasi data penuh melalui jadual data dan API diperlukan.
Senarai ciri semasa boleh diperluaskan lagi untuk memetakan fail CSV ke jadual/model pangkalan data dan menjana aplikasi web papan pemuka sepenuhnya.
Kod Sumber: Pemproses CSV sebahagian daripada Perkhidmatan AppSeed (sumber terbuka)
Sebelum kita mula menerangkan kod dan penggunaan, mari kita ringkaskan ciri alat:
Penghurai CSV boleh dilaksanakan melalui CLI selepas mengklon sumber projek dan menjadikannya boleh digunakan seperti yang dijelaskan dalam README. Setelah pemasangan selesai, kami boleh memanggil pemproses CVS menggunakan satu pelapik ini:
$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect.json
Alat melaksanakan tugas berikut:
Perkara yang sama boleh digunakan pada fail tempatan dan jauh. Sebagai contoh, kita boleh menganalisis Titanic.cvs yang terkenal dengan menjalankan satu baris ini:
$ 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)
Berikut ialah bahagian alat yang berkaitan:
Memuatkan maklumat dan menyemak sumber terlebih dahulu jika tempatan atau jauh
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'] )
Analisis pengepala dan petakan jenis yang dikesan kepada Jenis Django.
Untuk paparan jadual, Perpustakaan Jadual digunakan:
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))
Langkah terakhir ialah Cetak data 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
Pada ketika ini, kod tersebut memberikan kita akses kepada maklumat CSV, jenis data dan jenis data koresponden untuk Django. Pemetaan boleh diperluaskan dengan mudah untuk mana-mana rangka kerja seperti Flask, Express atau NextJS.
Pemetaan jenis untuk Django ialah yang ini:
# 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)', }
Alat ini sedang dalam pembangunan aktif dan berikut ialah langkah seterusnya:
Terima kasih kerana membaca!
Bagi mereka yang berminat untuk menyumbang, jangan ragu untuk menyertai platform AppSeed baharu dan berhubung dengan komuniti di Discord:
Atas ialah kandungan terperinci CSV - Proses Fail Setempat & Jauh dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!