Python tsv文件和基于源文件的列重命名之间的完全联接

Python tsv文件和基于源文件的列重命名之间的完全联接,python,bash,dataframe,Python,Bash,Dataframe,我有176个.tsv文件,这是基因比对的结果,如下所示: 目标识别码 长度 tpm ENST001 12 100 ENST001 9 5. 让我知道如果这个代码对你有效,没有这些文件很难测试 import re import os import sys import pandas as pd tpm_dict = {} for fn in os.listdir(sys.argv[1]): if re.match('.*\.tsv$', fn): header = fn

我有176个
.tsv
文件,这是基因比对的结果,如下所示:

目标识别码 长度 tpm ENST001 12 100 ENST001 9 5.
让我知道如果这个代码对你有效,没有这些文件很难测试

import re
import os
import sys
import pandas as pd

tpm_dict = {}

for fn in os.listdir(sys.argv[1]):
    if re.match('.*\.tsv$', fn):
        header = fn.replace('.tsv', '')
        this_df = pd.read_csv(os.path.join(sys.argv[1], fn), sep='\t')
        for i, row in this_df.iterrows():
            try:
                tpm_dict[row['target_id']][header] = row['tpm']
            except KeyError:
                try:
                    tpm_dict[row['target_id']] = {header: row['tpm']}
                except:
                    print(f"Problem in {fn} at row {i}")

df = pd.DataFrame.from_dict(tpm_dict, orient='index')
df.to_csv('joined.tsv', sep='\t')
另存为
tsvjoin.py
,然后运行
python3 tsvjoin.py


编辑:输入错误

你的目录结构是什么样的?文件名为srr1000001.tsv?这是正确的。模式为SRR*.tsv。为了清晰起见,我将把它添加到我的帖子中。谢谢阿尔伯特。但是,我收到一个错误
FileNotFoundError:[Errno 2]文件SRR1146093.tsv不存在:“SRR1146093.tsv”
。知道为什么吗?我的错,我在阅读的时候忘了附加目录。现在就试试。感谢您的快速回复和修复!我现在遇到了另一个错误
TypeError:'str'对象不能解释为整数
我做了一些更改,您可以再试一次。我仍然得到相同的错误,不幸的是,加上一些新的错误<代码>类型错误:在处理上述异常期间,无法将“str”对象解释为整数,发生了另一个异常:。。。。。。。。KeyError:“tpm”