CSV - Proses Fail Setempat & Jauh dalam Python

WBOY
Lepaskan: 2024-08-28 18:30:37
asal
506 orang telah melayarinya

CSV - Process Local & Remote Files in Python

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:

  • muat fail tempatan dan jauh
  • nilai cetak
  • cetak jenis lajur yang dikesan
  • cetak jenis pemetaan ke Model Django

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
Salin selepas log masuk

Alat melaksanakan tugas berikut:

  • sahkan input
  • cari fail CSV (keluar dengan ralat jika tidak ditemui)
  • memuatkan maklumat dan mengesan jenis lajur
  • mengesan jenis lajur Django
  • cetak 10 baris pertama

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)  
Salin selepas log masuk

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'] )
Salin selepas log masuk

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))
Salin selepas log masuk

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 
Salin selepas log masuk

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)',
}
Salin selepas log masuk

Alat ini sedang dalam pembangunan aktif dan berikut ialah langkah seterusnya:

  • sambungkan alat kepada lebih banyak sumber data seperti pangkalan data jauh/tempatan (SQLite, MySql, PgSQL), JSON
  • Jana Model untuk sebarang rangka kerja: FastAPI, Flask, Express, NextJS
  • Jana API selamat di atas
  • Janakan Jadual Data penomboran sebelah pelayan menggunakan Tailwind/Bootstrap untuk penggayaan

Terima kasih kerana membaca!

Bagi mereka yang berminat untuk menyumbang, jangan ragu untuk menyertai platform AppSeed baharu dan berhubung dengan komuniti di Discord:

  • AppSeed - platform sumber terbuka untuk pembangun
  • Komuniti AppSeed - 3k+ ahli 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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan