此方法输入文件和文件目录。它包含一个数据矩阵,需要在给定的行名和该行的相应字母之后复制每行的前20列。跳过每个文件的前3行,因为它具有不需要的不重要信息,并且也不需要文件底部的数据。
例如,文件如下所示:
unimportant information--------
unimportant information--------
-blank line
1 F -1 2 -3 4 5 6 7 (more columns of ints)
2 L 3 -1 3 4 0 -2 1 (more columns of ints)
3 A 3 -1 3 6 0 -2 5 (more columns of ints)
-blank line
unimportant information--------
unimportant information--------
该方法的输出需要以某种给定的形式打印出一个“矩阵”。
到目前为止,输出以字符串形式给出了每一行的列表,但是我正在尝试找出解决问题的最佳方法。我不知道如何忽略文件末尾的不重要信息。我不知道如何只检索每行字母后面的前20列,也不知道如何忽略行号和行字母。
def pssmMatrix(self,ipFileName,directory):
dir = directory
filename = ipFileName
my_lst = []
#takes every file in fasta folder and put in files list
for f in os.listdir(dir):
#splits the file name into file name and its extension
file, file_ext = os.path.splitext(f)
if file == ipFileName:
with open(os.path.join(dir,f)) as file_object:
for _ in range(3):
next(file_object)
for line in file_object:
my_lst.append(' '.join(line.strip().split()))
return my_lst
预期结果:
['-1 2 -3 4 5 6 7'], ['3 -1 3 4 0 -2 1'], ['3 -1 3 6 0 -2 5']
实际结果:
['1 F -1 2 -3 4 5 6 7'], ['2 L 3 -1 3 4 0 -2 1'], ['3 A 3 -1 3 6 0 -2 5'], [' '], [' unimportant info'], ['unimportant info']
答案 0 :(得分:0)
尝试此解决方案。
#include <string>
#include <iostream>
const std::string digits = "0123456789abcdefghijklmnopqrstuvwxyz";
int main()
{
for (auto a : digits)
{
for (auto b : digits)
{
for (auto c : digits)
{
for (auto d : digits)
{
std::cout << a << b << c << d << '\n';
if (a == '1') // stop at 1000
return 0;
}
}
}
}
}
答案 1 :(得分:0)
要删除前两列,您可以更改:
my_lst.append(' '.join(line.strip().split()))
到
my_lst.append(' '.join(line.strip().split()[2:]))
这将在拆分后的前两列以及将它们重新连接在一起之前删除前两列。
要删除最后3条无关的行,也许最简单的解决方案就是更改:
return my_lst
到
return my_lst[:-3]
这将返回除最后三行之外的所有内容。
答案 2 :(得分:0)
好吧,在我看来,您的文件中包含所需的某些行,并且所需的行始终以数字开头,后跟一个字母。因此,我们可以做的就是在其中应用一个正则表达式,该表达式仅获取与该模式匹配的行,并且仅获取该模式之后的数字
此表达式看起来像(?<=[0-9]\s[A-Z]\s)[0-9\-\s]+
import re
reg = re.compile(r'(?<=[0-9]\s[A-Z]\s)[0-9\-\s]+')
for line in file:
if reg.search(line):
result = reg.search(test).group(0)
# Use Result
my_lst.append(' '.join(result))
希望有帮助