【问题标题】:Read and list unique words from a txt file using Python使用 Python 从 txt 文件中读取和列出唯一单词
【发布时间】:2019-10-31 05:23:52
【问题描述】:

所以我的任务是:

Write a program to list which letters in the file seqs.txt are not A, T, C, or G. It should only list
each letter once. Hint: Start with an empty list for unknown letters. Then use two loops to scan
letters in each sequences.

目前,我一直不知道如何实现两个循环来扫描字母。

def main():
    with open('seqs.txt','r') as seqs_file:
        unknown = ("A","T","G","C")
        #unknown_list = ("B","D","E","F","H","I","J","K","L","M","N","O","P"
                         # ,"Q","R","S","U","V","X","Y","Z")
        for unknown in seqs_file:
            if True:
                return()
            else:
                print(#the other letters not ATCG#)
main()

这是我知道的代码。我曾尝试使用.read() 命令,但之后我不确定如何制作这两个循环。希望能帮助我走上正轨!

编辑:文本文件包含以下内容:

ATTCCATCGTATCCACACCGAGAACAACCCCATGTTGGCCTGGCAGCCAGAGGTTCTCCCTTTGGCGGTCACCTGCAGCCCGGCTGGCTTGCCAGCCCGACTGTGGGGGCCGGGTTCACACCTGGCCGGCTGTTTCTCCCATTCAAACCAATATCTGAAGGCAATTGCTTGCTCACACGAGCGGCGACTAACAAAGACAACTCTCAACAACGGATATCTTGGCTCCCGCAACGATGAAGAACGCAGCGAAATGCGATACGTAGTGTGAATTGCAGAATTCCGTGAACCATCCAATCTTTGAACGCATATTGCGCCCCACGGCCTCGGCCCAGGGCATGTCTGCCTCAGCGTCTGTTTACCCCCTCTCCCCCCTTTCACATACTGTGAAATCGGGAAGGTTGTGGTCTTGTGCTGCGGCACTTGGCCGAAATTCAGTGATACTGCAGGGACCGTTAATCGGACTCCAGCTTGGTAGGCGTTTCCCTTGTGGAATTATGCATGCCGCTGTTGGCCGTGGACCACTGCAGCTGTCAAGCAGGGAAAACCTTTCAAATT P>

只是一个例子。

【问题讨论】:

  • 你想得到什么?我不太明白你的期望?
  • 我们能知道seqs.txt文件的内容吗

标签: python python-3.x list loops


【解决方案1】:

我会使用它并忽略会让你完全偏离正轨的愚蠢提示:

import string

with open('seqs.txt') as fin :
    characters = [i.upper() for i in fin.read() if i in string.letters]

result = set(characters) - set(['A', 'T', 'C', 'G'])

print sorted(result)

【讨论】:

  • 你好,所以 IDLE 目前给我一个错误,说“排序”是无效的语法
  • 和另一个错误说模块'string'没有属性'letters'
  • @aislinx for python3 请使用`string.ascii_letters'
  • @aislinx 并使用带有附加括号的print( sorted(result) )
【解决方案2】:

如果您想要唯一性,使用集合比使用列表更有意义...

known = {"A", "T", "G", "C"}
unknown = set()
with open('seqs.txt','r') as seqs_file:
    for letter in seqs_file.read():
        unknown.add(letter)
unknown -= known
for letter in unknown:
    print(letter)

【讨论】:

  • 您有没有想过文件中可能出现的标点符号和数字?
  • 是的,每晚至少睡四十分钟,然后才仁慈地要求我入睡。
  • 所以。我目前收到此错误:AttributeError: 'dict' object has no attribute 'add',已尝试将其更改为 .append 但它仍然说它不存在。
  • 啊,是的,你想让set() 声明一个空集。
  • 您介意再解释一下您的上述评论吗?我对此非常陌生。谢谢!
【解决方案3】:

据我所知,解决您的问题的最简单方法是读取文件、拆分文件并列出它。要获得独特的元素,请将其转换为 set,简单的 for 循环将为您提供解决方案。

f = open("seq.txt", 'r')
unknown_letters = list(f.read())
known_letters = ['A', 'T', 'G', 'C']
unknown_unique_letters_set = set(unknown_letters)

for i in unknown_unique_letters_set:
    if i in known_letters:
        pass
    else:
        print(i)

如果你不想使用 set() 并想坚持下面的代码:

f = open("seq.txt", 'r')
unknown_letters = list(f.read())
known_letters = ['A', 'T', 'G', 'C']
visited_letters = []
for i in unknown_letters:
    if i in known_letters:
        pass
    elif i in visited_letters:
        pass
    else:
        visited_letters.append(i)

print(visited_letters)

【讨论】:

  • 您好,根据我对您提供的代码的理解,它会打印出已知字母而不是“未知”。也测试过,结果不对。
  • 您现在在问题中发布的输入文件没有空格。试试我上面编辑的解决方案。我没有吐痰,而是将其转换为列表。
  • 您的输入文件也没有任何未知字母。在测试之前尝试添加一些未知字母,例如 MMMMMM。它会给出像单个 M 一样的结果
  • 它能给你想要的答案吗?
  • 是的!我相信我得到了正确的输出。我想知道您是否可以解释一下为什么选择使用 set()。 list() 在这种情况下不起作用吗?
【解决方案4】:
def main():
    #y.txt contains this space separated string 'A B C D E F G H I J K L M N O P Q R S T U V X Y Z'
    with open('some_file.txt','r') as seqs_file:
        data = seqs_file.read().split()
        other = []
        unknown = ("A","T","G","C")
        for d in data:
            if d in unknown:
                pass
            elif d not in other:
                print(d)
                other.append(d)
main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 2013-06-23
    • 2016-08-06
    • 1970-01-01
    • 2021-03-17
    • 2021-03-08
    • 2019-01-18
    • 2022-06-12
    相关资源
    最近更新 更多