Разделение большого файла CSV (значения, разделенные запятыми) на несколько файлов меньшего размера может быть полезно для различных целей, например для уменьшения использования памяти, повышения скорости обработки или разделения данных для параллельной обработки. В этой статье блога мы рассмотрим несколько методов выполнения этой задачи с помощью Python. Каждый метод будет сопровождаться примером кода, иллюстрирующим реализацию.
Метод 1: использование модуля csv и Pandas
Пример кода:
import csv
import pandas as pd
def split_csv_with_csv_module(input_file, chunk_size):
with open(input_file, 'r') as file:
reader = csv.reader(file)
header = next(reader)
current_chunk = 1
current_rows = []
for row in reader:
current_rows.append(row)
if len(current_rows) == chunk_size:
output_file = f'output_{current_chunk}.csv'
with open(output_file, 'w', newline='') as chunk_file:
writer = csv.writer(chunk_file)
writer.writerow(header)
writer.writerows(current_rows)
current_chunk += 1
current_rows = []
if current_rows:
output_file = f'output_{current_chunk}.csv'
with open(output_file, 'w', newline='') as chunk_file:
writer = csv.writer(chunk_file)
writer.writerow(header)
writer.writerows(current_rows)
# Usage example
split_csv_with_csv_module('input.csv', 1000)
Метод 2. Использование библиотеки pandas
Пример кода:
import pandas as pd
def split_csv_with_pandas(input_file, chunk_size):
df = pd.read_csv(input_file)
chunks = [df[i:i + chunk_size] for i in range(0, df.shape[0], chunk_size)]
for i, chunk in enumerate(chunks):
output_file = f'output_{i + 1}.csv'
chunk.to_csv(output_file, index=False)
# Usage example
split_csv_with_pandas('input.csv', 1000)
Метод 3. Использование библиотеки csvkit
Пример кода:
from csvkit import CSVKitReader, CSVKitWriter
def split_csv_with_csvkit(input_file, chunk_size):
with open(input_file, 'r') as file:
reader = CSVKitReader(file)
header = next(reader)
current_chunk = 1
current_rows = []
for row in reader:
current_rows.append(row)
if len(current_rows) == chunk_size:
output_file = f'output_{current_chunk}.csv'
with open(output_file, 'w', newline='') as chunk_file:
writer = CSVKitWriter(chunk_file)
writer.writerow(header)
writer.writerows(current_rows)
current_chunk += 1
current_rows = []
if current_rows:
output_file = f'output_{current_chunk}.csv'
with open(output_file, 'w', newline='') as chunk_file:
writer = CSVKitWriter(chunk_file)
writer.writerow(header)
writer.writerows(current_rows)
# Usage example
split_csv_with_csvkit('input.csv', 1000)
Разделение больших файлов CSV на более мелкие фрагменты является распространенным требованием в задачах обработки данных. В этой статье мы рассмотрели три различных метода достижения этой цели с помощью Python. Первый метод использовал модуль csvвместе с Pandas, второй метод опирался исключительно на Pandas, а третий метод использовал библиотеку csvkit. В зависимости от ваших конкретных потребностей и предпочтений вы можете выбрать метод, который подходит вам лучше всего.
Используя эти методы, вы можете эффективно разбивать большие файлы CSV на несколько файлов меньшего размера, что позволяет улучшить обработку и анализ данных.