我想知道这是否可能?我不熟悉使用Windows命令行,但我必须将它用于我正在进行的项目.我有一些文件,我需要为每个文件执行一个函数.我习惯使用python,但显然这有点不同,所以我希望得到一些帮助.
基本上我需要for循环遍历文件夹中的17个文件,在每个文件上执行一个函数(使用我在这里为项目使用的特定软件),然后输出一个具有唯一名称的文件(该函数通常需要我说出输出文件的名称)我会把它搞砸,然后手工为17中的每一个做,但基本上它是创建一个文件的数据库,然后将它与17中的每一个进行比较.它需要通过迭代来完成几百次.使用for循环可以节省我几天的工作量.
建议?
def Ancestors (otu,tree):
if tree[otu][0][0] == None:
return []
else:
return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
Run Code Online (Sandbox Code Playgroud)
问题本质上是在某些时候,函数试图调用一个None的东西,而不是返回我想要的列表的函数.我认为if语句已经解释了,但看起来我错了.有什么建议?
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
Ancestors('A',a)
File "C:\x.py", line 129, in Ancestors
return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
File "C:\x.py", line 129, in Ancestors
return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
File "C:\x.py", line 129, in Ancestors
return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
File "C:\x.py", line 129, in Ancestors
return [otu,tree[otu][0][0]] + Ancestors (tree[otu][0][0],tree)
File "C:\x.py", line 126, in Ancestors
if tree[otu][0][0] …Run Code Online (Sandbox Code Playgroud) def RandomString (length,distribution):
string = ""
for t in distribution:
((t[1])/length) * t[1] += string
return shuffle (string)
Run Code Online (Sandbox Code Playgroud)
这将返回标题中描述的语法错误.在这个例子中,distribution是一个元组列表,每个元组包含一个字母及其分布,列表中的所有分布总计为100,例如:
[("a",50),("b",20),("c",30)]
Run Code Online (Sandbox Code Playgroud)
并且length是您想要的字符串的长度.
这是最荒谬的事情,但我在excel中按日期排序时遇到问题.我有一个日期列,我投入的东西,格式如下
14/6/2012
15/12/2012
16/2/2012
17/9/2012
17/10/2012
17/11/2012
Run Code Online (Sandbox Code Playgroud)
等等.然而,当我尝试对它们进行排序时,它只根据第一个数字进行排序,如上所示.当我突出显示数据时,在excel窗口的顶部,它不再说一般它说日期所以我认为excel知道它们是日期.但是,如果我去排序和过滤以尝试选择几个不同的级别进行排序,当我尝试按日期排序时,它会将A排序为Z,这看起来很奇怪.然后,当我将日期列复制并粘贴到新工作表上以试图找出错误时,几个条目变成了哈希,只有######,但只有少数条目做了那些和所有这些都组合在一起.
有谁知道什么可能是错的?这实际上让我疯了,它应该是最简单的事情.
这是我的代码
slidingwindowplotATGC = function(windowsize, inputseq)
{
starts = seq(1, length(inputseq)-windowsize, by = windowsize)
n = length(starts)
chunkGs = numeric(n)
chunkAs = numeric(n)
chunkTs = numeric(n)
chunkCs = numeric(n)
for (i in 1:n) {
chunk = windowsize[starts[i]:(starts[i]+9999)]
chunkG = sum("g" == chunk)/length(chunk)
chunkA = sum("a" == chunk)/length(chunk)
chunkT = sum("t" == chunk)/length(chunk)
chunkC = sum("c" == chunk)/length(chunk)
chunkGs[i] = chunkG
chunkAs[i] = chunkA
chunkTs[i] = chunkT
chunkCs[i] = chunkC
}
plot(starts,chunkGs,type="b",ylim=c(min(min(chunkAs),min(chunkTs),min(chunkCs),min(chunkGs)),max(max(chunkAs),max(chunkTs),max(chunkCs),max(chunkGs))),col = "red")
points(starts,chunkTs,col = "blue")
points(starts,chunkAs,col = "green")
points(starts,chunkCs)
Run Code Online (Sandbox Code Playgroud)
} …
我有一些大型数据文件,我想复制每行的某些数据,基本上是ID代码.ID代码|在一侧有一个空间,在另一侧有空间.我想知道是否可以提取ID.我还有两个数据文件,一个每行有4个ID码,另一个每行有23个.
目前我正在考虑从数据文件中复制每一行,然后相互减去字符串以获得所需的ID代码,但肯定必须有一个更简单的方法!救命?
以下是我正在使用的数据文件中的一行示例
cluster8032: WoodR1|Wood_4286 Q8R1|EIK58010 F113|AEV64487.1 NFM421|PSEBR_a4327
Run Code Online (Sandbox Code Playgroud)
从这一行我想要在单独的行上输出
Wood_4286
EIK58010
AEV644870.1
PSEBR_a4327
Run Code Online (Sandbox Code Playgroud) 我有一个.txt文件,格式如下,
C
V
EH
A
IRQ
C
C
H
IRG
V
Run Code Online (Sandbox Code Playgroud)
虽然显然它比那要大得多,但实质上就是它.基本上我试图将每个字符串在文件中的次数相加(每个字母/字符串在一个单独的行上,所以从技术上讲,文件是C \nV \nEH \n等等.但是当我尝试将这些文件转换为列表,然后使用count函数时,它会分出字母,以便'IRQ'等字符串为['\n'I','R' ,'Q','\n']所以当我算上它时,我会得到每个字母而不是字符串的频率.
这是我到目前为止编写的代码,
def countf():
fh = open("C:/x.txt","r")
fh2 = open("C:/y.txt","w")
s = []
for line in fh:
s += line
for x in s:
fh2.write("{:<s} - {:<d}".format(x,s.count(x))
Run Code Online (Sandbox Code Playgroud)
我想要最终得到的是一个看起来像这样的输出文件
C 10
V 32
EH 7
A 1
IRQ 9
H 8
Run Code Online (Sandbox Code Playgroud) string = ""
for e in list:
string += e
Run Code Online (Sandbox Code Playgroud)
如何将for循环表示为列表解析,以便输出字符串?
希望有人可以提供帮助,我正在尝试使用正则表达式从模式之后的字符串中提取某些东西,但它不起作用,我不知道为什么.正则表达式在linux中运行良好...
import re
s = "GeneID:5408878;gbkey=CDS;product=carboxynorspermidinedecarboxylase;protein_id=YP_001405731.1"
>>> x = re.search(r'(?<=protein_id=)[^;]*',s)
>>> print(x)
<_sre.SRE_Match object at 0x000000000345B7E8>
Run Code Online (Sandbox Code Playgroud) 我有点像python的菜鸟,但我正在尝试创建一个递归函数,就像内置范围函数一样:
def Range (lo, hi):
if lo >= hi:
return []
else:
return [lo, Range (lo+1,hi)]
Run Code Online (Sandbox Code Playgroud)
但它返回多个列表.
而不是[3,4,5,6],这就是我想要的,它的归还[3,[4,[5,[6,[]]]]]
为什么是这个以及如何解决它?
以下面的代码为例,其中包含2个for循环.
for xy in set:
for name in dict:
if xy == name:
print("Yay")
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如果发现if语句是真的,它会继续迭代'dict'还是会回到第一个for循环并进入下一次迭代?我不敢相信我已经使用python多久了,我不知道这个简单问题的答案.
谢谢!