如何使用Python3统计TSV文件中每行字符串的所有双字符组合(AA-ZZ)出现次数
Python3 实现TSV文件每行双字符组合统计
没问题,我来给你一段实用的代码,专门处理你的需求——统计TSV文件每行长字符串里从AA到ZZ所有双字符组合的出现次数。
代码实现
import string import csv from collections import defaultdict # 生成所有AA到ZZ的双大写字母组合 all_pairs = [a + b for a in string.ascii_uppercase for b in string.ascii_uppercase] def count_single_string_pairs(input_str): """统计单个字符串中所有双字符组合的出现次数""" pair_counts = defaultdict(int) # 遍历字符串的连续两个字符 for i in range(len(input_str) - 1): current_pair = input_str[i] + input_str[i+1] pair_counts[current_pair] += 1 # 补全所有可能的组合,没出现的设为0 return {pair: pair_counts.get(pair, 0) for pair in all_pairs} def process_tsv_file(input_tsv_path, output_tsv_path=None): """处理TSV文件,返回每行的统计结果,可选写入输出文件""" results = [] with open(input_tsv_path, 'r', encoding='utf-8') as tsv_file: # 用csv模块读取TSV,自动处理制表符分隔 tsv_reader = csv.reader(tsv_file, delimiter='\t') for row in tsv_reader: # 跳过空行,取每行的第一个字段(假设每行只有一个长字符串) if not row: continue target_str = row[0].strip() # 统计当前行的双字符组合 row_counts = count_single_string_pairs(target_str) results.append(row_counts) # 如果指定了输出路径,把结果写入新的TSV文件 if output_tsv_path: with open(output_tsv_path, 'w', encoding='utf-8', newline='') as output_file: # 用DictWriter写入,表头是所有双字符组合 tsv_writer = csv.DictWriter(output_file, fieldnames=all_pairs, delimiter='\t') tsv_writer.writeheader() tsv_writer.writerows(results) return results # 示例使用 if __name__ == "__main__": # 替换成你的输入TSV文件路径 input_file = "your_data.tsv" # 可选:替换成你想要保存结果的路径 output_file = "pair_counts_result.tsv" process_tsv_file(input_file, output_file) print("统计完成!结果已保存到指定文件(如果设置了输出路径)")
代码说明
- 生成所有双字符组合:用
string.ascii_uppercase获取所有大写字母,通过双重列表推导式生成AA到ZZ的全部676个组合,确保不会遗漏任何可能的配对。 - 单字符串统计:用
defaultdict高效统计字符串中实际出现的双字符,最后补全所有预设组合的计数(没出现的设为0),完全符合你要求的输出格式。 - TSV文件处理:使用Python内置的
csv模块读取和写入TSV,避免手动处理制表符、换行符带来的错误,同时自动跳过空行,增强鲁棒性。 - 输出灵活:既可以返回统计结果的列表,也可以将结果写入新的TSV文件,方便后续分析。
比如你给出的示例字符串AEAETLQAKIN,这段代码会正确统计出AE:2、AK:1、EA:1,其他未出现的组合计数为0,完全符合你的需求。
内容的提问来源于stack exchange,提问作者michel
相关产品推荐
相关产品推荐

