如何使用Python将文本文件中的空格替换为分号?

2024-04-24 15:50:25 发布

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

我有一个大的文本文件,其中包含许多分离的值。但是文本文件的值由空格和分号分隔。下面是Unix中使用Less命令的一些行的外观:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT
chr7    149601  MERGED_DEL_2_39754      T       .       141.35  .   AC=0;AF=0.00;AN=2;DP=37;MQ=37.00;MQ0=0;1000gALT=<DEL>;AF1000g=0.09
chr7    149616  rs190051229     C       .       108.65  .       AC=0;AF=0.00;AN=2;DP=35;MQ=37.00;MQ0=0;1000gALT=T;AF1000g=0.00
chr7    149628  rs3814456       A       .       129.31  .       AC=0;AF=0.00;AN=2;DP=37;MQ=37.00;MQ0=0;1000gALT=G;AF1000g=0.14
chr7    149634  rs146001818     G       T       1375.63 .       AC=2;AF=1.00;AN=2;BaseQRankSum=0.456;DP=39;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.9997;MQ=37.00;MQ0=0;MQRankSum=1.641;QD=35.27;ReadPosRankSum=1.459;1000gALT=T;AF1000g=0.01

我想用分号代替chr7旁边的空白。然后我想在POS值的某个范围内选择行,例如:149601到149628(前三行),这样我就可以计算出这个范围内AF100g的总值(本例中的前三行是0.24)。在

我该怎么做?在


Tags: pos命令anunixacdplessaf
1条回答
网友
1楼 · 发布于 2024-04-24 15:50:25

我不太明白你说的“差30分或更少”是什么意思。因为1号线(149601)和2号线(149616)的差值是15,而这里已经不到30了。在

现在,要获得所需的值(假设您正在迭代该文件并将每一行存储在一个名为line的变量中):

POS:我建议先用一个空格替换所有空格,然后使用这个空格将字符串分成多个部分(line = re.sub(r" +", r" ", line))。第二个元素就是POS值(pos = int(line.split(" ")[1]))。在

AF值:只需使用正则表达式搜索关键字:float(re.match(r".*?AF1000g=(.*?)\s.*?", line).groups()[0])

保留一个全局变量,该变量将每个循环步骤中的单独AF值相加。当达到所需条件时,打印相加的AF值。继续将前一个POS值保存在循环外的变量中,并取两个POS值之间的差。如果需要正值,请记住使用abs()。在

相关问题 更多 >