免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4574 | 回复: 26
打印 上一主题 下一主题

帮忙改程序!Pythond 在WINDOWS下是如何规定输出在一个指定文件里? [复制链接]

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-07 09:37 |只看该作者 |倒序浏览
本帖最后由 咏咏672418539 于 2015-12-07 10:00 编辑

文件 mydata(由ATCG四种元素构成)
〉1
ATGTCTAAANGTTCCTACTATTTTGAACCCTACTGANANGANAGACCTTCAACTCTTATT
〉2
GCCAAGAACCTCAACACTTGATTAACCTTGG
〉3
CAAGACGTGGGAAAAGCTCATCTTTGCTGCTATTGTGGTTGTC
〉4
TCTGCTCGTCCCTACGGCCACCGTGCCGCCTT
〉5
CTTCACGCCAGGTACGTTTACCAATTACATCAGCTGAC
程序为:
#!/usr/bin/python2
# coding: utf-8

from collections import defaultdict as DICK

DATA = 'mydata'  # 也就是 文件名
F = open(DATA)
U = 6  # 六联体
V = [0.25**n for n in xrange(U + 1)]
N = 'AGCT'

for line in F:
    print line,
    seq = F.next()
    dic = DICK(int)

    for i in xrange(len(seq) - U):
        sub = seq[i:i + U]
        num = sub.count('N')

        if num is 0:
            dic[sub] += 1
            continue

        L = ['']
        for c in sub:
            if c is 'N': L = [e + C for e in L for C in N]
            else       : L = [e + c for e in L]

        for e in L: dic[e] += V[num]

    for k, v in sorted(dic.items()): print k, v
    tot = float(i + 1)
    for k, v in sorted(dic.items()):
        print '%s\t%f\t%f' % (k, v, v / tot)
结果为:
AGCTAG        1        0.500000
GCTAGA        2        0.125000
GCTAGC        1        0.125000
GCTAGG        1        0.125000
GCTAGT        3         0.125000
……
想要结果出现在一个我指定的文件里,比如名叫3.py的里面,要把命令加在哪里?用不用在那个盘下创建一个3.py?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2015-12-07 10:00 |只看该作者
回复 1# 咏咏672418539
发错版块了...

   

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
3 [报告]
发表于 2015-12-07 10:43 |只看该作者
假设你的文件是a.py,输入python a.py > 3.py应该可以
脚本的话可以这样改一下,学的python 3,不知道兼不兼容python 2
  1. #!/usr/bin/python2
  2. # coding: utf-8

  3. from collections import defaultdict as DICK

  4. DATA = 'mydata'  # 也就是 文件名
  5. F = open(DATA)
  6. U = 6  # 六联体
  7. V = [0.25**n for n in xrange(U + 1)]
  8. N = 'AGCT'

  9. out_fh = open('3.py', 'r')

  10. for line in F:
  11.     print line,
  12.     seq = F.next()
  13.     dic = DICK(int)

  14.     for i in xrange(len(seq) - U):
  15.         sub = seq[i:i + U]
  16.         num = sub.count('N')

  17.         if num is 0:
  18.             dic[sub] += 1
  19.             continue

  20.         L = ['']
  21.         for c in sub:
  22.             if c is 'N': L = [e + C for e in L for C in N]
  23.             else       : L = [e + c for e in L]

  24.         for e in L: dic[e] += V[num]

  25.     for k, v in sorted(dic.items()): print k, v
  26.     tot = float(i + 1)
  27.     for k, v in sorted(dic.items()):
  28.         line = '%s\t%f\t%f' % (k, v, v / tot)
  29.         print line
  30.         out_fh.write(line)
复制代码

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
4 [报告]
发表于 2015-12-07 11:12 |只看该作者
回复 2# sunzhiguolu


    ??

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
5 [报告]
发表于 2015-12-07 11:44 |只看该作者
回复 3# stanley_tam


    可以呀!谢谢

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
6 [报告]
发表于 2015-12-07 11:50 |只看该作者
回复 1# 咏咏672418539

亲,[ ]
  1. #!/usr/bin/python2
  2. # coding: utf-8

  3. from collections import defaultdict as DICK

  4. DATA = 'mydata2'  # 也就是 文件名
  5. SAVE = 'mysave'  # 想要结果出现在一个我指定的文件里

  6. F = open(DATA)
  7. S = open(SAVE, 'w')
  8. U = 6  # 六联体
  9. V = [0.25**n for n in xrange(U + 1)]
  10. N = 'AGCT'

  11. for line in F:
  12.     S.write(line)
  13.     seq = F.next().rstrip()
  14.     dic = DICK(int)

  15.     for i in xrange(len(seq) - U + 1):
  16.         sub = seq[i:i + U]
  17.         num = sub.count('N')

  18.         if num is 0:
  19.             dic[sub] += 1
  20.             continue

  21.         L = ['']
  22.         for c in sub:
  23.             if c is 'N': L = [e + C for e in L for C in N]
  24.             else: L = [e + c for e in L]

  25.         for e in L:
  26.             dic[e] += V[num]

  27.     tot = float(i + 1)
  28.     for k, v in sorted(dic.items()):
  29.         S.write('%s\t%f\t%f\n' % (k, v, v / tot))
复制代码

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
7 [报告]
发表于 2015-12-08 11:26 |只看该作者
回复 6# substr函数


    谢谢亲这么乐于助人,我现在已经弄出来了。又有一个问题,有时间帮我解答一下吧,好吗?
文件 mydata(由ATCG及“-”5种元素构成)
〉1
ATGTCTA---ATGTCTAAGTTCCTACTATTT-TGAACCCTACTGAAG--------AAGACCTTCAACTCTTATT
〉2
----------GCCAAGAACCTCAACACTTG-----ATTAACCTTGG
〉3
CAAGACGTGGGGGAA--AA---GCTCATCTTTGCTGCTATTGTGGTTGTC
〉4
-TCTGCTCGTCCCTACGGCCACCGTGCCGC--CTT
〉5
CTTCACG--CCAGGTACGTTTACCAATTA-----------CATCAGCTGAC
目的:计算六联体的频数及频率,只是每个序列在计算统计过程中如果遇到“-”,就从“-”之后不是“-”的部分算起,统计“-”前后的部分的频数,然后把一样的加起来,求频率。
例如序列〉1,前六个是ATGTCT,再就是TGTCTA,后来遇到了---,之后是ATGTCT和TGTCTA,至此,ATGTCT和TGTCTA都有两个……

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
8 [报告]
发表于 2015-12-08 11:28 |只看该作者
回复 3# stanley_tam


    壮士,再帮个忙吧,我现在有了新的难题

文件 mydata(由ATCG及“-”5种元素构成)
〉1
ATGTCTA---ATGTCTAAGTTCCTACTATTT-TGAACCCTACTGAAG--------AAGACCTTCAACTCTTATT
〉2
----------GCCAAGAACCTCAACACTTG-----ATTAACCTTGG
〉3
CAAGACGTGGGGGAA--AA---GCTCATCTTTGCTGCTATTGTGGTTGTC
〉4
-TCTGCTCGTCCCTACGGCCACCGTGCCGC--CTT
〉5
CTTCACG--CCAGGTACGTTTACCAATTA-----------CATCAGCTGAC

目的:计算六联体(和上面一样,也是计算连续六个)的频数及频率,只是每个序列在计算统计过程中如果遇到“-”,就从“-”之后不是“-”的部分算起,统计“-”前后的部分的频数,然后把一样的加起来,求频率。
例如序列〉1,前六个是ATGTCT,再就是TGTCTA,后来遇到了---,不计算,之后是ATGTCT和TGTCTA,至此,ATGTCT和TGTCTA都有两个……

论坛徽章:
1
青铜圣斗士
日期:2015-12-05 20:21:44
9 [报告]
发表于 2015-12-09 10:59 |只看该作者
回复 8# 咏咏672418539


    我找到了简便算法,这种小事,不用大神费心了

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
10 [报告]
发表于 2015-12-11 13:03 |只看该作者
回复 7# 咏咏672418539


    亲,[ ]
  1. #!/usr/bin/python2
  2. # coding: utf-8

  3. from collections import defaultdict as DICK

  4. DATA = 'mydata'  # 也就是 文件名
  5. SAVE = 'mysave'  # 想要结果出现在一个指定的文件里

  6. F = open(DATA)
  7. S = open(SAVE, 'w')
  8. U = 6  # 六联体

  9. for line in F:
  10.     S.write(line)
  11.     SEQ = F.next().rstrip().split("-")
  12.     dic = DICK(int)
  13.     tot = 1.0
  14.     for seq in SEQ:
  15.         if seq == '' or len(seq) < U: continue
  16.         for i in xrange(len(seq) - U + 1):
  17.             sub = seq[i:i + U]
  18.             dic[sub] += 1
  19.             tot += 1

  20.     for k, v in sorted(dic.items()):
  21.         S.write('%s\t%f\t%f\n' % (k, v, v / tot))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP