Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中解析文件中的列后获取唯一元素_Python_Filehandle - Fatal编程技术网

在python中解析文件中的列后获取唯一元素

在python中解析文件中的列后获取唯一元素,python,filehandle,Python,Filehandle,我正在使用Python 3.6。我有一个tsv文件,它由5列和>100k行组成。我使用split函数通过分隔符解析文件,我从中接收到带有索引的特定列。我正在撰写的专栏如下所示: CSF3R DNMT3A DNMT3A DNMT3A DNMT3A CBLB PDGFRA KIT TET2 TET2 CUX1 CUX1 CUX1 CUX1 CUX1 CUX1 CUX1 CUX1 EZH2 EZH2 RAD21 ABL1 NOTCH1 NOTCH1 ETV6 ETV6 ETV6 FLT3 FLT3 T

我正在使用Python 3.6。我有一个tsv文件,它由5列和>100k行组成。我使用split函数通过分隔符解析文件,我从中接收到带有索引的特定列。我正在撰写的专栏如下所示:

CSF3R
DNMT3A
DNMT3A
DNMT3A
DNMT3A
CBLB
PDGFRA
KIT
TET2
TET2
CUX1
CUX1
CUX1
CUX1
CUX1
CUX1
CUX1
CUX1
EZH2
EZH2
RAD21
ABL1
NOTCH1
NOTCH1
ETV6
ETV6
ETV6
FLT3
FLT3
TP53
TP53
我需要做的是获取本专栏中的所有独特元素,并只打印其中一个。 我尝试了很多函数,比如join、set,尝试了很多其他stackoverflow帖子,但没有一个真正解决我的问题

另外,我收到的数据是“str”格式,而不是列表。因此,我也试着把它们都列在一个列表中,但同样失败了。 我无法使用python pandas,因为我所有的同事都不知道这个包

因此,我尝试的面向过程的普通代码是:

file=open('filename.txt')
next(file)
    stripped=()
    pos=()
    s="-"

    for line in file:
        stripped=line.strip()
        pos=stripped.split("\t")

        pos[2]= [y for y in (x.strip() for x in pos[2].splitlines()) if y]
        print(pos[2])
输出给出了所有字符串的列表,即每个字符串都包含在单独的列表中,而不是单个列表中

从上面的列表中,我的预期输出是:

CSF3R
DNMT3A
CBLB
PDGFRA
KIT
TET2
CUX1
EZH2
RAD21
ABL1
NOTCH1
ETV6
FLT3
TP53
这只给了我独特的元素

要获得唯一的元素,我必须在一个列表中获得所有这些元素,还是有其他更好的方法

我正在研究的问题。

从这个答案:


要将文件转换为字符串列表,请每行使用一个字符串:

with open('filename.txt') as f:
    list_from_file = [x.strip() for x in f.readlines()]

print(set(list_from_file))
对于以制表符分隔的五列文件,请尝试:

with open('file1') as f:
    col1, col2, col3, col4, col5 = zip(
        *(y.split('\t') for y in (x.strip() for x in f.readlines())))
然后可以在所需列上使用set

filename = "path/to/Post.txt"

with open(filename) as f:
    header = next(f)
    col = 2                                                # gene column
    unique_genes = {line.split()[col] for line in f.readlines()}

print(unique_genes)
# {'KIT', 'PDGFRA', 'CUX1', 'CBLB', 'DNMT3A', 'RAD21', 'CSF3R', 'NOTCH1', 'GENE', 'ABL1', 'TET2', 'EZH2'}
从数据的第三列获取唯一项的步骤如下:

使用打开文件 下一步跳过标题 迭代文件读取行的行 按默认分隔符拆分行,例如制表符\t 仅从第三列[col]中提取数据 返回提取的数据集上的唯一值,{…}。 安全地用
通过更改列值来选择不同的列。

我认为最简单的方法肯定是使用集合。由于您当前正在使用列表列表:[[CSF3R]、[DNMT3A]、[DNMT3A]、…],因此将无法使用集合。如果您将文本文件解析为一个字符串列表:[CSF3R,DNMT3A,DNMT3A,…],您将能够实现一个集合问题解决

您可以查看上面的实现以获得帮助。 另外,如果你想得到更好的帮助,只需发布你的文本文件格式,这样其他人就可以到处看看,或许可以找到更好的解决方案



最好的

当你使用set时,输出中出现了什么错误?@Zdar:据我所知,要使用set函数,你需要一个列表。问题是我不会得到所有这些的清单。我已经提到了这个链接-如果你的同事熟悉NumPy,有:@NumPy.unique-除了默认的包之外,他们都不熟悉任何额外的包,我也不熟悉。文件是否完全如图所示?作者提到他想避免使用熊猫。哦,对不起,我将尝试修复和删除的now@PhongPhung例如我得到了答案。我从专栏中得到了一个完全独特的元素列表!通过操纵几个命令,我可以对您的解决方案进行不同的操作!非常感谢你!这给出了一个单独的字符列表,即尝试它并得到输出为-{F',R',C',3',S'}{D',3',N',a',M',T'}请给出一个输出示例。没问题。请包括您获得的实际输出。因此,我前面提到的“尝试您的代码”注释就是我从您的代码中获得的输出。我从代码中得到的输出是这样的-['CSF3R']['DNMT3A']['DNMT3A']Raunch-这是一个很棒的解释,可以逐行解析数据。那么,如何进行逐列解析呢?这就是为什么我在前面询问文件是否完全如图所示。如果不是如图所示,那么我们需要知道列是如何分开的。Raunch-正如我在问题中提到的,该文件由5列和10万行组成,上面提到的文件片段只是一列,我想要的是该列中唯一的元素,输出应该只有这些唯一的元素。也许你可以发布前10行文件,使用适当的分隔符,并用项目符号指出该文件的性质,你想做什么@Srk@PhongPhung:很抱歉,我对这个问题不太清楚,但我将编辑这个问题并发布文件的前十行。谢谢你指导我这么做!
filename = "path/to/Post.txt"

with open(filename) as f:
    header = next(f)
    col = 2                                                # gene column
    unique_genes = {line.split()[col] for line in f.readlines()}

print(unique_genes)
# {'KIT', 'PDGFRA', 'CUX1', 'CBLB', 'DNMT3A', 'RAD21', 'CSF3R', 'NOTCH1', 'GENE', 'ABL1', 'TET2', 'EZH2'}