首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用perl从csv文件中提取行数据?

如何使用perl从csv文件中提取行数据?
EN

Stack Overflow用户
提问于 2019-08-18 14:39:31
回答 1查看 141关注 0票数 0

我有一个csv文件

基因组名称,Resistance_phenotype,阿米卡星,庆大霉素,氨曲南AB1,敏感,抗性,抗性AB2,感病,易感AB3,抗性,抗性,NA

我需要填写第二列,即抗性表型MDR,XDR和易感。为此,我必须匹配抗生素耐药谱,如在第一行、庆大霉素和安曲南都是耐药的,第二列将填充MDR,而在第三列,如果所有3列都是敏感的,则第三列的第二列将充满易感物。

我已经编写了下面提到的代码,它只显示csv文件的列。我被困在该做进一步的事上了。

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;
my $file = 'text.csv';
my @data;
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
while (my $line = <$fh>) {
    chomp $line;
    my @fields = split(/,/, $line);
    print $fields[0], "\n";
    #print $fields[1], "\n";
}
close $file;

基因组名称,Resistance_phenotype,阿米卡星,庆大霉素,氨曲南AB1,MDR,敏感,抗性,AB2,敏感,易感AB3,MDR,抗药性,抗性,NA

EN

回答 1

Stack Overflow用户

发布于 2019-08-18 15:39:00

使用XS模块。读取一行,为该列分配正确的值,然后再次打印。在示例代码中,您只编写了一列而不是所有列;模块将为您处理所有这些:

代码语言:javascript
复制
use Text::CSV_XS;

my $csv = Text::CSV_XS->new;

# replace *DATA and *STDOUT with whatever filehandles you want
# to read then write.
while( my $row = $csv->getline(*DATA) ) {
    $row->[1] = 'Some value';
    $csv->say( *STDOUT, $row );
    }


__DATA__
Genome Name,Resistance_phenotype,Amikacin,Gentamycin,Aztreonam
AB1,,Susceptible,Resistant,Resistant
AB2,,Susceptible,Susceptible,Susceptible
AB3,,Resistant,Resistant,NA

产出如下:

代码语言:javascript
复制
"Genome Name","Some value",Amikacin,Gentamycin,Aztreonam
AB1,"Some value",Susceptible,Resistant,Resistant
AB2,"Some value",Susceptible,Susceptible,Susceptible
AB3,"Some value",Resistant,Resistant,NA
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57545580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档