在python中用数字替换丢失的数据

2024-09-28 21:52:22 发布

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

我有这样一个制表符分隔的文件

Acc Pop snp1 snp2 snp3 snp4 snp5
a1  pop1    0   1   0   1   0
a2  pop1    0   1           0
a3  pop1    0   1   0   0   0
a4  pop1    0   1   0   1   0
a5  pop1    0   1   0       0
a6  pop1        1   0   0   0
a7  pop1    0   1   0   0   0
a8  pop1    0   1   0   0   0
a9  pop1    0   1   0       
a10 pop1    0   1   0   0   1

我需要用'-9'替换所有丢失的数据。所以输出像这样

Acc Pop snp1 snp2 snp3 snp4 snp5
a1  pop1    0   1   0   1   0
a2  pop1    0   1   -9 -9   0
a3  pop1    0   1   0   0   0
a4  pop1    0   1   0   1   0
a5  pop1    0   1   0   -9  0
a6  pop1    -9  1   0   0   0
a7  pop1    0   1   0   0   0
a8  pop1    0   1   0   0   0
a9  pop1    0   1   0   -9  -9
a10 pop1    0   1   0   0   1

下面是我的尝试

import re
infilename = 'file2.txt'
outfilename = 'file.txt'
regex = re.compile(r"\s+")    

with open(infilename, 'r') as infile, open(outfilename, 'w') as outfile:
    for line in infile:
        line = line.rstrip('\n').split('\t')
        outfile.write(regex.sub('-9', line))

Tags: a2a1linepopa3a4acca5
1条回答
网友
1楼 · 发布于 2024-09-28 21:52:22

你差点就成功了。你知道吗

当你做分割的时候,你会得到一个项目列表,所以你不能对它们做正则表达式。你知道吗

相反,通过列表进行迭代,如果没有设置值,只需将值替换为-9。你知道吗

import re
infilename = 'file2.txt'
outfilename = 'file.txt'

with open(infilename, 'r') as infile, open(outfilename, 'w') as outfile:
    for line in infile:
        line = line.rstrip('\n').split('\t')
        line = [val if val else '-9' for val in line]
        outfile.write('\t'.join(line) + '\n')

请记住,这将替换表中的所有“空白”字段,甚至是标题中的一个字段。你知道吗

相关问题 更多 >