0

I'm working on pset6 2020 dna. I'm having trouble inputting the sequence file to be compared into my search function. If I just open the file and copy paste the sequence into the code as a string, it works and returns all the correct values in a timely fashion, but I can't do the same with the object into which I've read the file. I tried to look for a function that converts an FO into a string, but apperently the f.read() function returns a string object? I'm new to python and do not know if there is a diffrence between a string and a stringt object. If anyone would be willing to let me know what I'm doing wrong or point me in the direction of a good resource I'd be very grateful!!!

This works:

from cs50 import get_string
from sys import argv, exit
import csv


def main(): # main function
    if len(argv) != 3: # ensuring proper usage
        print("Wrong  number of command line arguments.")
        print("Usage: programname.py file.csv dna.txt")

    with open(argv[1], newline = '') as csvfile: #opening database
        reader0 = csv.reader(csvfile, delimiter=",")
        firstl = next(reader0) # isolating the first line to get the names of the STRs
        nos = len(firstl) - 1 #isolating the number of STRs

        STRs = []

        for i in range(1,nos + 1): #adding the names of the STRs to a list for later access
            STRn = firstl[i]

            STRs.append(STRn)

        reader = csv.DictReader(csvfile,firstl) #reading database into memory

        print(reader.fieldnames)
        print(STRs)
        VALUES = []


        for i in range(nos):
            value = search('AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG', STR = STRs[i])

            VALUES.append(value)

        print(VALUES)


def search(seq, STR): #function to analyze the dna sequences for an individual STR
    val= 0
    start = 0
    STRlen = len(STR)
    EVAL = []
    while True:
        found = seq.find(STR, start)

        if found == -1:
            EVAL.append(val)
            break
        if start != found:
            EVAL.append(val)
            val = 0
            val += 1
            start = found + STRlen
        else :
            val += 1
            start = found + STRlen


    print(EVAL)
    endval = max(EVAL)
    return endval

main()

But this does not:

from cs50 import get_string
from sys import argv, exit
import csv


def main(): # main function
    if len(argv) != 3: # ensuring proper usage
        print("Wrong  number of command line arguments.")
        print("Usage: programname.py file.csv dna.txt")

    with open(argv[1], newline = '') as csvfile: #opening database
        reader0 = csv.reader(csvfile, delimiter=",")
        firstl = next(reader0) # isolating the first line to get the names of the STRs
        nos = len(firstl) - 1 #isolating the number of STRs

        STRs = []

        for i in range(1,nos + 1): #adding the names of the STRs to a list for later access
            STRn = firstl[i]

            STRs.append(STRn)

        reader = csv.DictReader(csvfile,firstl) #reading database into memory

        print(reader.fieldnames)
        print(STRs)
        VALUES = []

        sequence_o = open(argv[2], "r")
        sequence = sequence_o.read


        for i in range(nos):
            value = search(sequence, STR = STRs[i])

            VALUES.append(value)

        print(VALUES)


def search(seq, STR): #function to analyze the dna sequences for an individual STR
    val= 0
    start = 0
    STRlen = len(STR)
    EVAL = []
    while True:
        found = seq.find(STR, start)

        if found == -1:
            EVAL.append(val)
            break
        if start != found:
            EVAL.append(val)
            val = 0
            val += 1
            start = found + STRlen
        else :
            val += 1
            start = found + STRlen


    print(EVAL)
    endval = max(EVAL)
    return endval

main()

This generates the following error message:

Traceback (most recent call last): File "dna.py", line 66, in
main() File "dna.py", line 34, in main
value = search(sequence, STR = STRs[i]) File "dna.py", line 47, in search
found = seq.find(STR, start) AttributeError: 'builtin_function_or_method' object has no attribute 'find'

1 Answer 1

1

This sequence = sequence_o.read doesn't execute the read function. It declares sequence as (basically) a copy of the read function. When a function does not take arguments (as with read), one must use read() to execute the function.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .