本文目录导读:

Python 实现(推荐)
基础去重(保留首次出现顺序)
def remove_duplicates(input_file, output_file):
seen = set()
with open(input_file, 'r', encoding='utf-8') as fin, \
open(output_file, 'w', encoding='utf-8') as fout:
for line in fin:
line_stripped = line.rstrip('\n')
if line_stripped not in seen:
seen.add(line_stripped)
fout.write(line)
print(f"去重完成!原始行数: 未知, 去重后行数: {len(seen)}")
# 使用示例
remove_duplicates('input.txt', 'output.txt')
统计信息版
def dedup_with_stats(input_file, output_file):
seen = set()
duplicate_count = 0
total_count = 0
with open(input_file, 'r', encoding='utf-8') as fin, \
open(output_file, 'w', encoding='utf-8') as fout:
for line in fin:
total_count += 1
line_stripped = line.rstrip('\n')
if line_stripped not in seen:
seen.add(line_stripped)
fout.write(line)
else:
duplicate_count += 1
print(f"总行数: {total_count}")
print(f"重复行数: {duplicate_count}")
print(f"去重后行数: {len(seen)}")
print(f"去重完成!")
dedup_with_stats('input.txt', 'output.txt')
Shell 命令实现
基础去重(排序后去重)
# 排序后去重(不保留原始顺序) sort input.txt | uniq > output.txt # 统计去重信息 sort input.txt | uniq -c > output_with_count.txt
保留顺序去重
# 使用 awk 保留第一次出现的顺序 awk '!seen[$0]++' input.txt > output.txt # 或者使用 cat -n 配合 sort cat -n input.txt | sort -k2 -k1n | uniq -f1 | sort -nk1 | cut -f2-
批量文件处理
import os
from pathlib import Path
def batch_dedup(folder_path, extension='.txt'):
"""批量处理文件夹中的所有文件"""
folder = Path(folder_path)
for file_path in folder.glob(f'*{extension}'):
print(f"处理文件: {file_path.name}")
output_path = file_path.parent / f"{file_path.stem}_dedup{extension}"
remove_duplicates(str(file_path), str(output_path))
# 使用示例
batch_dedup('./data', '.txt')
高级去重选项
def advanced_dedup(input_file, output_file, ignore_case=False,
strip_whitespace=True, remove_empty=True):
"""高级去重,支持更多选项"""
seen = set()
with open(input_file, 'r', encoding='utf-8') as fin, \
open(output_file, 'w', encoding='utf-8') as fout:
for line in fin:
# 处理空白字符
if strip_whitespace:
line_processed = line.strip()
else:
line_processed = line.rstrip('\n')
# 忽略空行
if remove_empty and not line_processed:
continue
# 忽略大小写
if ignore_case:
line_processed = line_processed.lower()
if line_processed not in seen:
seen.add(line_processed)
fout.write(line)
print(f"去重完成!共处理 {len(seen)} 条唯一记录")
# 使用示例
advanced_dedup('input.txt', 'output.txt', ignore_case=True)
大文件处理(内存优化)
def dedup_large_file(input_file, output_file, chunk_size=10000):
"""处理超大文件的分块去重"""
import tempfile
import heapq
# 分块排序
temp_files = []
with open(input_file, 'r', encoding='utf-8') as fin:
chunk = []
for i, line in enumerate(fin, 1):
chunk.append(line)
if i % chunk_size == 0:
chunk.sort()
temp = tempfile.NamedTemporaryFile(mode='w', delete=False,
encoding='utf-8')
temp.writelines(chunk)
temp.close()
temp_files.append(temp.name)
chunk = []
if chunk:
chunk.sort()
temp = tempfile.NamedTemporaryFile(mode='w', delete=False,
encoding='utf-8')
temp.writelines(chunk)
temp.close()
temp_files.append(temp.name)
# 合并去重
files = [open(f, 'r', encoding='utf-8') for f in temp_files]
with open(output_file, 'w', encoding='utf-8') as fout:
last_line = None
for line in heapq.merge(*files):
if line != last_line:
fout.write(line)
last_line = line
# 清理临时文件
for f in files:
f.close()
for f in temp_files:
os.unlink(f)
# 使用示例
dedup_large_file('large_file.txt', 'output.txt')
注意事项
- 编码问题:根据文件实际编码调整
encoding参数 - 内存管理:大文件建议使用分块处理
- 换行符:不同操作系统换行符不同,Python 会自动处理
- 性能考虑:
- 小文件使用 Python set 方法最快
- 大文件使用分块排序合并更省内存
选择哪种方法取决于你的具体需求:
- 文件大小
- 是否要保留原始顺序
- 是否需要统计信息
- 处理文件的批量程度
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播