重新格式化表格每个条目有多个分隔符

2024-03-29 05:07:21 发布

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

我正在mac上工作,更喜欢用Bash、R或Python3重新格式化。你知道吗

下面是我正在使用的表的一个小示例。该表有数千行长,每行的列数可变。另外,这个例子包含12个逗号分隔的值,从Isofrorm\开始,但是为了可读性,我把它减少到了4。你知道吗

ENSMUSG0000001234 2.0 Isoform1_0.9,0.0,0.6,1.3 Isoform2_0.1,0.0,0.0,0.5
ENSMUSG0000005555 1.0 Isoform1_0.5,0.1,0.4,1.0 Isoform2_0.7,0.3,0.0,0.1 Isoform3_0.3,9.9,2.0,3.0

我想能够搜索和重新格式化一行感兴趣的以下内容。提取我可以使用的感兴趣的行

grep "ENSMUSG0000001234" ./filename

但我没有足够的经验,知道如何通过位置和各种分隔符提取值,并正确组织输出。我认为python可能是最好的工具,但我是python新手。你知道吗

我需要重新格式化的条目如下所示

0.9 0.0 0.6 1.3 
0.1 0.0 0.0 0.5

为清楚起见,行名称和列名如下

IsoformID Cell1 Cell2 Cell3 Cell4
Isoform1 0.9 0.0 0.6 1.3 
Isoform2 0.1 0.0 0.0 0.5

非常感谢您的帮助。你知道吗


Tags: bash示例mac感兴趣python3例子逗号可读性
1条回答
网友
1楼 · 发布于 2024-03-29 05:07:21

我看到您首选的解决方案是BashRPython 3,但这里有一个快速解决您问题的方法,我可以在php中为您提供。你知道吗

您可以将以下脚本保存到文件中,例如:reformat.php

<?php

$infile = $argv[1];

$handle = fopen($infile, "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $data = explode(' ', trim($line));
        print $data[0] . '-' . $data[1] . "\n";
        foreach (array_slice($data, 2) as $row) {
            print str_replace(['_', ','], ' ' , $row) . "\n";
        }
    }
    fclose($handle);
} else {
    exit("Unable to open file ($finfile)");
}

然后从命令行按以下方式运行它:

php reformat.php your_data_file

脚本逐行读取并处理文件。我使用前两个空格分隔的字段作为块标识符。然后处理行中剩余的字段(array_slice($data, 2))。你知道吗

输出:

ENSMUSG0000001234-2.0
Isoform1 0.9 0.0 0.6 1.3
Isoform2 0.1 0.0 0.0 0.5
ENSMUSG0000005555-1.0
Isoform1 0.5 0.1 0.4 1.0
Isoform2 0.7 0.3 0.0 0.1
Isoform3 0.3 9.9 2.0 3.0

更新:

我试着用python找出如何实现目标。我想出了以下解决办法。你知道吗

#!/usr/bin/python

with open("input.txt") as f:
    for line in f:
        row = line.strip().split(' ')
        print row[0] + '-' + row[1]
        for data in row[2:]:
            print data.replace('_', ' ').replace(',', ' ')

这将产生如上所示的相同输出。你知道吗

相关问题 更多 >