Python: Tukarkan Fail Yang Besar Kepada Fail Yang Lebih Kecil
Tidak perlu lagi copy dan paste secara manual
Sebenarnya saya berdepan dengan cabaran ini apabila ada satu requirement yang memerlukan saya menghantar fail csv yang mempunyai lebih daripada 50,000 rows kepada fail yang kecil (row mesti kurang daripada 5001). Jadi pada mulanya saya nak copy dan paste secara manual (sedihkan?), namun saya teringat saya pernah terbaca python pandas boleh bahagikan dengan cara pantas. Jadi selepas beberapa minit bertanya kepada Google saya temui website ini geeksforgeeks.org . Seperti yang saya mahukan.
Berpandukan code tersebut saya membuat sedikit modifikasi untuk menjadikannya lebih baik.
import pandas as pd
# read DataFrame
data = pd.read_csv("Customers.csv")
# no of csv files with row size
k = 2
size = 5
for i in range(k):
df = data[size*i:size*(i+1)]
df.to_csv(f'Customers_{i+1}.csv', index=False)
Dalam code asal saya perlu memberi nilai k merujuk kepada jumlah fail yang diperlukan. Bagi saya ini kurang berkesan kerana anda masih lagi perlu membuat kiraan secara manual untuk mendapatkan jumlah fail. Sebagai contoh jika jumlah row dalam file Customer.csv adalah 12, anda perlu lakukan: 12/5 = 2.4 dan anda perlu membundarkan kepada 3 .
Jadi saya membaiki code tersebut seperti di bawah:
import pandas as pd
import math
# read DataFrame
data = pd.read_csv("ALL_BATCH_01.csv")
total_row_count = len(data.index)
# Sais row
size = 5000
#Cara mendapatkan jumlah fail
total_files = math.ceil(total_row_count / size)
for i in range(total_files):
df = data[size*i:size*(i+1)]
df.to_csv(f'AUTO_SAPERATE_OFFLOAD_{i+1}.csv', index=False)
Saya menggunakan len(data.index) untuk mendapatkan jumlah row (tidak termasuk header). Selepas mendapatkan jumlah row dalam fail utama saya bahagikan jumlah tersebut dengan nilai size (5000). Untuk memastikan saya mendapatkan nilai dalam nombor integer saya menggunakan function math.ceil().
math.ceil() akan menukarkan nombor seperti 3.34 kepada 4. Dengan ini saya mendapat jumlah file yang tepat tanpa perkiraan secara manual.
Dengan menggunakan for loop saya membahagikan fail tersebut kepada beberapa fail.
df = data[size*i:size*(i+1)]
Bahagian ini akan menentukan range data yang dipilih sebagai contoh:
Jika i adalah 0:
data[5000*0 : 5000*(0+1)]
data[0:5000]
Jika i adalah 1:
data[5000*1 : 5000*(1+1)]
data[5000:10000]
Dan seterusnya.
Selamat mencuba!
Rujukan:
https://www.geeksforgeeks.org/how-to-create-multiple-csv-files-from-existing-csv-file-using-pandas/