python中不确定字符串与已知字符串的比较

2024-10-04 09:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我接收的tsv文件通常采用以下两种格式之一:

# format 1
sample    100    200    1
sample    200    300    2
sample    300    400    3
sample    400    500    X

或者

# format 2
sample    100    200    chr1
sample    200    300    chr2
sample    300    400    chr3
sample    400    500    chrX

有时我需要文件是第一种格式,有时我需要它是第二种格式。在运行python代码之前,我知道需要使用哪种格式,因此我一直在接收他们的csv文件,如果我有一个格式为1的文件,并且需要格式为2的文件,我会运行以下awk脚本:

awk '{print $1, $2, $3, "chr"$4}' tester.csv

它将格式1输出为类似于格式2的格式,并由python代码解释为文本文件,没有问题。我可以用sed做同样的事情:

sed 's/chr//' testerchr.txt

输出的格式2与格式1类似。然后运行python代码,比较如下:

testchr = [(1, 'ACGTGCTAGCTG'), (2, 'ACGATGCTAGCT'), (3, 'GCTCGT')]
regions = pd.read_csv('./tester.csv', sep='\t', names=['Sample', 'pos1', 'pos2', 'Chr'])

for x,y in testchr: # [(1, ACGTGCTAGCTGA), (2, ACGATGCTAGCT), (3, GCTCGT)]
    chrm = str(x)
    for u,v,a,b in zip(regions.Sample, regions.pos1, regions.pos2, regions.Chr):
        if str(b) == chrm:
            #process data

所以通常我有一个元组列表

如果我预处理数据(在python代码之前使用awk或sed命令),我就不会有任何问题。我只是想知道是否有人能提出一种方法,让我不必对数据进行预处理。基本上,我的python代码可以以任何一种格式接收数据并正常运行,而不必对输入进行任何修改,也不必事先让程序知道输入文件是哪种格式的。你知道吗

谢谢你, 丹尼斯


Tags: 文件csvsample代码format格式sedtester
1条回答
网友
1楼 · 发布于 2024-10-04 09:26:17

可以将其设为函数,并为格式1和格式2设置一个值。例如,如果val==something,则将“Char”列更改为格式1,否则将其更改为格式2:

def myFuction(df, val):
    if val == 1:
        df['Chr'] = df['Chr'].str[3:] # strip first 3 characters
        # do stuff with format 1
    else:
        df['Chr'] = 'chr'+df['Chr'] # add 'chr' in front
        # do stuff with format 2

format_val = input('Format Value: ')
myFunction(df, int(format_val))

相关问题 更多 >