【问题标题】:How to replace white space with semi-colon in text file using Python?如何使用 Python 在文本文件中用分号替换空格?
【发布时间】:2019-03-27 20:59:43
【问题描述】:

我有一个包含许多分隔值的大文本文件。但是文本文件的值由空格和分号分隔。下面是在 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) )。

我该怎么做?

【问题讨论】:

  • 用分号替换空格的目的是什么?你可以看看pandas;它对于处理结构化数据非常方便。
  • 嗨,fiixxer。 pandas 如何帮助我处理这种类型的文件?
  • 不确定文件格式是什么,但看起来 Pandas 肯定是要走的路。
  • 第一部分很简单,您可以使用替换方法,但您能否针对问题的第二部分更具体一些?
  • 萨拉,谢谢你的建议。对于第二部分,我想扫描每一行并跟踪 POS 的值(第 1 行,POS = 149601),同时对 AF100g 的值求和(第 1 行,该值为 AF1000g=0.09)。当我达到 30 或更少的差异时,我想停止扫描。这是第 1 行 149601 和第 3 行 149628 的 POS 值之间的差异。

标签: python whitespace


【解决方案1】:

我不太明白您所说的“相差 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()。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2017-05-22
    • 1970-01-01
    • 2015-10-03
    • 2021-10-05
    • 2011-02-12
    相关资源
    最近更新 更多