10
answers
1,323views


已解决

终于可以发帖了!。。。。

我想用perl批量处理一批序列文件,就是每个序列单独一个文件,大概一百多个文件,想写个程序,把所有文件批量打开,做处理,然后再关上,改原文件或者生成个新文件都可以。

但现在不知道怎么能一次打开很多文件,文件句柄可以是变量么?




    1

    可以用opendir函数哦。

    例子:

    #!/usr/bin/perl -w

    $dirname = "/tmp"; #指定一个目录

    opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
    while( ($filename = readdir(DIR))){
    print("$filename\n"); #循环输出该目录下的文件。
    ### do something ###
    }
    closedir(DIR);

    上面是循环拿到该目录下的文件。 这样就能循环对文件进行处理了,具体打开某个文件更改后,保存文件这些我就不。

    Current score: 1
    [Link] | [回复Ta]
    2

    @O型天蝎座:
    你貌似起得很早哦,大周末的。

    Current score: 0
    [Link] | [回复Ta]
    3

    @Sophie:恩,习惯了嘛。

    Current score: 0
    [Link] | [回复Ta]
    4

    我在while( ($filename = readdir(DIR))){
    之后 open (FH, "$filename")or die "could not open the file";
    while($seq=){.....
    显示无法打开$filename制定的文件,这个不是每次返回一个文件名称,将这个文件给文件句柄打开文件为什么不行呢?

    Current score: 0
    [Link] | [回复Ta]
    5

    返回的信息好像是permission denied,可是文件上没有作任何权限修改啊?

    Current score: 0
    [Link] | [回复Ta]
    6

    而且貌似循环处理文件里的每行序列,打开文件并修改也处理不成功。。。。

    Current score: 0
    [Link] | [回复Ta]
    7

    @tatianaliu:那是肯定的了。$filename只是文件名,你又没有指定目录。你要一步一步来。每一步都先测试成功。

    $dirname/$filename,这样目录才完整。

    Current score: 0
    [Link] | [回复Ta]
    8

    哦,好!多谢啦!!再试试看!

    @O型天蝎座:

    Current score: 0
    [Link] | [回复Ta]
    9

    学习了

    Current score: 0
    [Link] | [回复Ta]
    10

    把你要对每个文件要处理的perl程序先写好,例如是要把seq文件批量改成fa文件的perl程序。
    之后些个sh文件就好了,不要这么纠结。
    ls /pwd/ | awk '{print "perl *.pl /input pwd/"$0 " /output pwd/"$0}' > *.sh

    然后就sh *.sh 就ok了!
    这个sh就会自动帮你批量处理所有的文件了,前提是你所有的序列文件都是要做相同处理的!

    Current score: 1
    [Link] | [回复Ta]

    评论已关闭。