小编Loo*_*ast的帖子

如何使用python将'print'输出重定向到文件?

我想使用python将打印重定向到.txt文件.我有一个'for'循环,它会'打印'我的每个.bam文件的输出,而我想将所有这些输出重定向到一个文件.所以我试着把

 f = open('output.txt','w'); sys.stdout = f
Run Code Online (Sandbox Code Playgroud)

在我的脚本开头.但是我在.txt文件中什么都没得到.我的脚本是:

#!/usr/bin/python

import os,sys
import subprocess
import glob
from os import path

f = open('output.txt','w')
sys.stdout = f

path= '/home/xug/nearline/bamfiles'
bamfiles = glob.glob(path + '/*.bam')

for bamfile in bamfiles:
    filename = bamfile.split('/')[-1]
    print 'Filename:', filename
    samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],
                                  stdout=subprocess.PIPE,bufsize=1)
    linelist= samtoolsin.stdout.readlines()
    print 'Readlines finished!'
    ........print....
    ........print....
Run Code Online (Sandbox Code Playgroud)

所以有什么问题?除了这个sys.stdout之外的任何其他方式?

我需要我的结果如下:

Filename: ERR001268.bam
Readlines finished!
Mean: 233
SD: 10
Interval is: (213, 252)
Run Code Online (Sandbox Code Playgroud)

python file-writing

151
推荐指数
8
解决办法
50万
查看次数

ValueError:无法将字符串转换为float:id

我正在运行以下python脚本:

#!/usr/bin/python

import os,sys
from scipy import stats
import numpy as np

f=open('data2.txt', 'r').readlines()
N=len(f)-1
for i in range(0,N):
    w=f[i].split()
    l1=w[1:8]
    l2=w[8:15]
    list1=[float(x) for x in l1]
    list2=[float(x) for x in l2]
    result=stats.ttest_ind(list1,list2)
    print result[1]
Run Code Online (Sandbox Code Playgroud)

但是我得到的错误如下:

ValueError: could not convert string to float: id
Run Code Online (Sandbox Code Playgroud)

我很困惑.当我在交互式部分中只尝试一行时,而不是使用脚本循环:

>>> from scipy import stats
>>> import numpy as np
>>> f=open('data2.txt','r').readlines()
>>> w=f[1].split()
>>> l1=w[1:8]
>>> l2=w[8:15]
>>> list1=[float(x) for x in l1]
>>> list1
[5.3209183842, 4.6422726719, 4.3788135547, 5.9299061614, 5.9331108706, 5.0287087832, 4.57...]
Run Code Online (Sandbox Code Playgroud)

我运作良好.

任何人都可以解释一下吗?谢谢

python string floating-point

61
推荐指数
7
解决办法
59万
查看次数

使用Bash一次读取n行

我读了这个help read页面,但仍然没有意义.不知道使用哪个选项.

如何使用Bash一次读取N行?

bash

39
推荐指数
6
解决办法
5万
查看次数

你如何grep包含斜杠的字符串?

我应该如何grep包含正斜杠的字符串./.

grep slash

15
推荐指数
2
解决办法
4万
查看次数

如何根据数据帧的NAN百分比删除列?

对于某些列df,如果列的80%是NAN.

删除这些列的最简单的代码是什么?

python nan dataframe pandas

15
推荐指数
4
解决办法
8101
查看次数

使用R在直方图中进行y轴对数

嗨,我正在使用R进行直方图,但Y轴的数量是如此之大,我需要将其转换为对数.请参阅我的脚本下方:

hplot<-read.table("libl")
hplot
pdf("first_end")
hist(hplot$V1, breaks=24, xlim=c(0,250000000), ylim=c(0,2000000),main="first end mapping", xlab="Coordinates")
dev.off()
Run Code Online (Sandbox Code Playgroud)

那么我应该如何更改脚本?谢谢

logarithm r histogram

13
推荐指数
1
解决办法
2万
查看次数

预期的整数表达式

我想每隔5秒逐行读取我的文件.这次我只尝试了单行bash命令来执行此操作.而bash命令是:

let X=1;while [ $X -lt 20 ];do cat XXX.file |head -$X|tail -1;X=$X+1;sleep 5;done
Run Code Online (Sandbox Code Playgroud)

但是我收到的错误如下:

-bash: [: 1+1: integer expression expected
Run Code Online (Sandbox Code Playgroud)

有什么问题?顺便说一句,为什么我们不能做X <20?(相反,我们必须做 - 小于?)

谢谢

bash

11
推荐指数
1
解决办法
5万
查看次数

如何将Bash变量传递给Python?

最终我理解这一点,它的确有效.

bash脚本:

#!/bin/bash
#$ -V
#$ -cwd
#$ -o $HOME/sge_jobs_output/$JOB_ID.out -j y
#$ -S /bin/bash
#$ -l mem_free=4G


c=$SGE_TASK_ID
cd /home/xxx/scratch/test/
FILENAME=`head -$c testlist|tail -1`
python testpython.py $FILENAME
Run Code Online (Sandbox Code Playgroud)

python脚本:

#!/bin/python
import sys,os


path='/home/xxx/scratch/test/'
name1=sys.argv[1]
job_id=os.path.join(path+name1)
f=open(job_id,'r').readlines()
print f[1]
Run Code Online (Sandbox Code Playgroud)

谢谢

python variables bash

9
推荐指数
1
解决办法
2万
查看次数

使用python拆分大文件

我在尝试拆分大文件时遇到了一些麻烦(例如,大约10GB).基本思路是简单地读取行,并将每行分组,将40000行写入一个文件.但是有两种"阅读"文件的方式.

1)第一个是立即读取WHOLE文件,并将其变为LIST.但是这需要将WHOLE文件加载到内存中,这对于太大的文件来说是痛苦的.(我想之前我问过这样的问题)在python中,我尝试过读取WHOLE文件的方法包括:

input1=f.readlines()

input1 = commands.getoutput('zcat ' + file).splitlines(True)

input1 = subprocess.Popen(["cat",file],
                              stdout=subprocess.PIPE,bufsize=1)
Run Code Online (Sandbox Code Playgroud)

那么,我可以通过以下方式轻松地将40000行分组到一个文件中:list[40000,80000] or list[80000,120000] 或者使用列表的优点是我们可以轻松指向特定行.

2)第二种方式是逐行读取; 在阅读时处理该行.这些读取行不会保存在内存中.例子包括:

f=gzip.open(file)
for line in f: blablabla...
Run Code Online (Sandbox Code Playgroud)

要么

for line in fileinput.FileInput(fileName):
Run Code Online (Sandbox Code Playgroud)

我确定gzip.open,这个f不是列表,而是文件对象.似乎我们只能逐行处理; 那么我该如何执行这个"拆分"工作呢?如何指向文件对象的特定行?

谢谢

python split

9
推荐指数
2
解决办法
2万
查看次数

bash:/ bin/ls:参数列表太长了

我需要列出大量文件(40,000个文件),如下所示:

ERR001268_1_100.fastq  ERR001268_2_156.fastq  ERR001753_2_78.fastq
ERR001268_1_101.fastq  ERR001268_2_157.fastq  ERR001753_2_79.fastq
ERR001268_1_102.fastq  ERR001268_2_158.fastq  ERR001753_2_7.fastq
ERR001268_1_103.fastq  ERR001268_2_159.fastq  ERR001753_2_80.fastq
Run Code Online (Sandbox Code Playgroud)

我的命令是:ls ERR*_1_*.fastq |sed 's/\.fastq//g'|sort -n > masterlist 但是错误是:bash: /bin/ls: Argument list too long

但是我可以解决这个问题吗?有没有其他方法可以通过perl/python制作这样的列表?

谢谢

ls list fastq

8
推荐指数
1
解决办法
2万
查看次数