本文目录导读:

Python 实现(按行数分割)
#!/usr/bin/env python3
import os
def split_file_by_lines(input_file, lines_per_file=1000):
"""按行数分割文件"""
with open(input_file, 'r', encoding='utf-8') as f:
file_count = 1
line_count = 0
output_file = None
for line in f:
# 每lines_per_file行创建新文件
if line_count % lines_per_file == 0:
if output_file:
output_file.close()
base_name = os.path.splitext(input_file)[0]
output_file = open(f"{base_name}_part{file_count}.txt", 'w', encoding='utf-8')
file_count += 1
output_file.write(line)
line_count += 1
if output_file:
output_file.close()
# 使用示例
split_file_by_lines('large_file.txt', 500)
Python 实现(按大小分割)
#!/usr/bin/env python3
import os
import math
def split_file_by_size(input_file, chunk_size_mb=10):
"""按文件大小分割"""
chunk_size = chunk_size_mb * 1024 * 1024 # 转换为字节
file_size = os.path.getsize(input_file)
num_chunks = math.ceil(file_size / chunk_size)
with open(input_file, 'rb') as f:
for i in range(num_chunks):
base_name = os.path.splitext(input_file)[0]
ext = os.path.splitext(input_file)[1]
output_file = f"{base_name}_part{i+1}{ext}"
with open(output_file, 'wb') as out:
out.write(f.read(chunk_size))
# 使用示例
split_file_by_size('large_file.txt', 5) # 5MB每份
Shell 命令实现
按行数分割
# 每1000行分割为一个文件 split -l 1000 large_file.txt part_ # 使用数字后缀 split -l 1000 -d large_file.txt part_ # 指定后缀长度和前缀 split -l 1000 -d -a 3 large_file.txt part_
按大小分割
# 每10MB分割为一个文件 split -b 10M large_file.txt part_ # 使用数字后缀 split -b 10M -d large_file.txt part_
更完善的 Python 版本
#!/usr/bin/env python3
import os
import sys
import argparse
def split_file(input_file, mode='lines', chunk_size=1000, output_prefix=None):
"""
文件分割函数
:param input_file: 输入文件路径
:param mode: 分割模式 ('lines' 或 'size')
:param chunk_size: 每块的大小(行数或MB)
:param output_prefix: 输出文件前缀
"""
if not os.path.exists(input_file):
print(f"错误: 文件 {input_file} 不存在")
return
if output_prefix is None:
output_prefix = os.path.splitext(input_file)[0] + "_part"
ext = os.path.splitext(input_file)[1]
if mode == 'lines':
# 按行数分割
with open(input_file, 'r', encoding='utf-8') as f:
part_num = 1
current_lines = 0
for line in f:
if current_lines == 0:
output_file = f"{output_prefix}{part_num:03d}{ext}"
out_f = open(output_file, 'w', encoding='utf-8')
print(f"创建文件: {output_file}")
out_f.write(line)
current_lines += 1
if current_lines >= chunk_size:
out_f.close()
current_lines = 0
part_num += 1
if current_lines > 0:
out_f.close()
elif mode == 'size':
# 按大小分割(MB)
chunk_bytes = chunk_size * 1024 * 1024
with open(input_file, 'rb') as f:
part_num = 1
while True:
chunk = f.read(chunk_bytes)
if not chunk:
break
output_file = f"{output_prefix}{part_num:03d}{ext}"
with open(output_file, 'wb') as out_f:
out_f.write(chunk)
print(f"创建文件: {output_file}")
part_num += 1
print(f"分割完成!原文件被分为 {part_num - 1} 个文件")
def main():
parser = argparse.ArgumentParser(description='文件分割工具')
parser.add_argument('input_file', help='要分割的文件路径')
parser.add_argument('-m', '--mode', choices=['lines', 'size'],
default='lines', help='分割模式')
parser.add_argument('-n', '--number', type=int, default=1000,
help='每块的行数(lines模式)或大小MB(size模式)')
parser.add_argument('-p', '--prefix', help='输出文件前缀')
args = parser.parse_args()
split_file(args.input_file, args.mode, args.number, args.prefix)
if __name__ == "__main__":
main()
使用示例
# 使用shell命令 split -l 5000 -d data.txt chunk_ # 使用Python脚本(按行数) python splitter.py -m lines -n 2000 data.txt # 使用Python脚本(按大小) python splitter.py -m size -n 5 data.txt # 指定输出前缀 python splitter.py -m lines -n 1000 -p "output_" data.txt
高级功能:合并文件
#!/usr/bin/env python3
import glob
import os
def merge_files(pattern, output_file):
"""合并分割的文件"""
files = sorted(glob.glob(pattern))
if not files:
print(f"没有找到匹配的文件: {pattern}")
return
with open(output_file, 'wb') as out_f:
for file in files:
print(f"合并文件: {file}")
with open(file, 'rb') as in_f:
out_f.write(in_f.read())
print(f"合并完成!输出文件: {output_file}")
# 使用示例
merge_files('chunk_*.txt', 'merged_file.txt')
选择哪种方式取决于你的具体需求:
- 简单分割:使用 shell 的
split命令 - 需要自定义逻辑:使用 Python 脚本
- 大文件处理:建议使用二进制模式读取,提高效率
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播