本文目录导读:

我会为您介绍几种批量分割CSV文件的脚本方法,以下是最常用且高效的几种实现方式:
Python脚本(最灵活)
import pandas as pd
import os
def split_csv_by_rows(input_file, rows_per_file=1000, output_dir="output"):
"""
按行数分割CSV文件
"""
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 读取大文件时使用chunksize
chunk_count = 0
for chunk in pd.read_csv(input_file, chunksize=rows_per_file):
output_file = f"{output_dir}/part_{chunk_count:04d}.csv"
chunk.to_csv(output_file, index=False)
print(f"已创建: {output_file}")
chunk_count += 1
print(f"分割完成!共生成 {chunk_count} 个文件")
def split_csv_by_files(input_file, num_files=5, output_dir="output"):
"""
按文件数量均分CSV文件
"""
os.makedirs(output_dir, exist_ok=True)
# 计算总行数(去除表头)
with open(input_file, 'r') as f:
total_rows = sum(1 for _ in f) - 1
rows_per_file = total_rows // num_files + 1
chunk_count = 0
for chunk in pd.read_csv(input_file, chunksize=rows_per_file):
if chunk_count == num_files:
break
output_file = f"{output_dir}/part_{chunk_count:04d}.csv"
chunk.to_csv(output_file, index=False)
chunk_count += 1
# 使用示例
if __name__ == "__main__":
# 按每1000行分割
split_csv_by_rows("large_file.csv", rows_per_file=1000)
# 或者按文件数量分割
# split_csv_by_files("large_file.csv", num_files=10)
Bash脚本(Linux/Mac)
#!/bin/bash
# 按行数分割CSV文件
split_csv_by_rows() {
local input_file="$1"
local rows_per_file="${2:-1000}"
local output_prefix="${3:-part_}"
# 提取表头
head -1 "$input_file" > header.csv
# 分割数据(去掉表头)
tail -n +2 "$input_file" | split -l "$rows_per_file" - "${output_prefix}"
# 为每个分割文件添加表头
for file in ${output_prefix}*; do
if [ "$file" != "${output_prefix}" ] && [ -f "$file" ]; then
cat header.csv "$file" > temp_$file
mv temp_$file "$file.csv"
rm -f "$file" # 删除无表头的临时文件
fi
done
rm -f header.csv
echo "分割完成!"
}
# 按文件数量分割
split_csv_by_files() {
local input_file="$1"
local num_files="${2:-5}"
local output_prefix="${3:-part_}"
total_lines=$(wc -l < "$input_file")
lines_per_file=$((total_lines / num_files + 1))
split_csv_by_rows "$input_file" "$lines_per_file" "$output_prefix"
}
# 使用示例
# split_csv_by_rows "data.csv" 1000
# split_csv_by_files "data.csv" 10
Windows PowerShell脚本
# Split-CSV.ps1
param(
[Parameter(Mandatory=$true)]
[string]$InputFile,
[Parameter(Mandatory=$false)]
[int]$RowsPerFile = 1000,
[Parameter(Mandatory=$false)]
[string]$OutputDir = "output"
)
function Split-CsvByRows {
param(
[string]$InputFile,
[int]$RowsPerFile,
[string]$OutputDir
)
# 创建输出目录
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
# 读取CSV内容
$csvData = Import-Csv $InputFile
$totalRows = $csvData.Count
$chunkCount = 0
$startRow = 0
while ($startRow -lt $totalRows) {
$endRow = [Math]::Min($startRow + $RowsPerFile - 1, $totalRows - 1)
$chunk = $csvData[$startRow..$endRow]
$outputFile = Join-Path $OutputDir ("part_{0:D4}.csv" -f $chunkCount)
$chunk | Export-Csv -Path $outputFile -NoTypeInformation
Write-Host "已创建: $outputFile"
$startRow = $endRow + 1
$chunkCount++
}
Write-Host "分割完成!共生成 $chunkCount 个文件"
}
# 调用函数
Split-CsvByRows -InputFile $InputFile -RowsPerFile $RowsPerFile -OutputDir $OutputDir
使用awk(Unix/Linux)
#!/bin/bash
# 使用awk高效分割CSV
split_csv_awk() {
local input_file="$1"
local rows_per_file="$2"
local output_prefix="part_"
awk -v rows="$rows_per_file" -v prefix="$output_prefix" '
NR == 1 {
header = $0
file_count = 1
print header > (prefix sprintf("%04d", file_count) ".csv")
line_count = 1
next
}
{
if (line_count >= rows) {
close(prefix sprintf("%04d", file_count) ".csv")
file_count++
print header > (prefix sprintf("%04d", file_count) ".csv")
line_count = 0
}
print >> (prefix sprintf("%04d", file_count) ".csv")
line_count++
}
' "$input_file"
}
# 使用
# split_csv_awk "large_file.csv" 1000
使用建议
- 小文件(<100MB):使用Python或PowerShell
- 大文件(>1GB):使用awk或Bash脚本(内存占用低)
- Windows环境:使用PowerShell脚本
- 跨平台需求:使用Python脚本
安装依赖
Python方法需要安装pandas:
pip install pandas
这些脚本都会保留CSV文件的表头,确保每个分割文件都是完整的CSV格式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播