首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印超过指定长度的行

如何打印超过指定长度的行
EN

Stack Overflow用户
提问于 2019-11-23 10:59:10
回答 2查看 54关注 0票数 0

我有一个这样的输入文件:

代码语言:javascript
复制
@sample1
ATGGTTCCAAGGCCTTGGTTAATTGGGGGGTTTTTTTTTTTTTTTTTTT

@sample2
TTGGAACCTTGGCCAATTAAGGGGGGGGGTTTTTTTCCCCCCCCCCCCC

@sample3
GGTTGGTTGGGAATTTGGTTAACCTTTTTAAATTTTTTTTTTTGGGGGG
AATTTTTTTTTTTTTGG

我想打印出有特定最小长度的行。例如,如果我想要的最小长度是66,那么输出将是:

代码语言:javascript
复制
@sample3
GGTTGGTTGGGAATTTGGTTAACCTTTTTAAATTTTTTTTTTTGGGGGG
AATTTTTTTTTTTTTGG

因为只有样本3的序列具有最小长度66

到目前为止,我的代码如下:

代码语言:javascript
复制
    fastfile = {}
    with open(sys.argv[1]) as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            if line.startswith("@"):
                sequencenumber = line[1:]
                if sequencenumber not in fastfile:
                    fastfile[sequencenumber] = []
                continue
            sequence = line
            fastfile[sequencenumber].append(sequence)

            output = []
            for key, value in fastfile.items():
                if len(value) >= sys.argv[2]:
                    output.append(value)
                    print (output)

Argv1是输入文件的路径,argv2是特定的最小长度。

EN

回答 2

Stack Overflow用户

发布于 2019-11-23 11:10:50

您希望快速文件字典的值是字符串,而不是列表,因此,您需要将它们连接到运行字符串,而不是将连续的序列附加到运行列表中:

代码语言:javascript
复制
fastfile = {}
with open(sys.argv[1]) as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        if line[0] == "@":
            sequencenumber = line[1:]
            if sequencenumber not in fastfile:
                fastfile[sequencenumber] = ""
            continue
        fastfile[sequencenumber] += line

output = []
for key, value in fastfile.items():
    if len(value) >= sys.argv[2]:
        output.append(value)
print (output)

或者,如果您需要像最初那样将字符串存储在列表中,则使用"".join(value)将所有字符串连接在一起,如下所示:

代码语言:javascript
复制
output = []
for key, value in fastfile.items():
    if len("".join(value)) >= sys.argv[2]:
        output.append("".join(value))
output
票数 1
EN

Stack Overflow用户

发布于 2019-11-23 11:33:56

这看起来简单得多:

代码语言:javascript
复制
with open(argv[1]) as fin :
    text = fin.read()

min_length = int(argv[2])

parts = text.split('@')
# choose only the parts that have strings over the min_length
parts = [p for p in parts if any(len(i) > min_length for i in p.split('\n'))]

output = '@'.join( parts )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59004153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档