TypeError: 'file' object is not subscriptable

Code-Stücke können hier veröffentlicht werden.
Antworten
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Hallo Leute,

ich möchte mit meinem Skript Text-Dateien öffnen und spezifische Positionen im String verändern.
Hierbei haben ich zwei Files, die ich mit meinem Skript aufrufe.

Die 1. File hat folgenden Inhalt: AAAAAAAAAACCCCCCA
und die 2. File hat folgenden Inhalt: AAAAAAAAATTTTACAC

Hier der Code:

Code: Alles auswählen


import random
import os

class simulate_evolution_SNP():

    def create_seqs ():
        # given sequence and nucleotide bases: starting point

        refseq1 = open("C:/Users/Florian/Desktop/testseq.fa", 'r')
        refseq2 = open("C:/Users/Florian/Desktop/testseq2.fa", 'r')
        print("Reference seq1: " + refseq1.read())
        print("Reference seq2: " + refseq2.read())

        nucleotide_bases = ["A","T","C","G"]

        while True:
            pos = input("Input a specific position (int): ") # define specific position
            try:
                pos = int(pos)
            except ValueError:
                print("That is no valid number. Try again !")
                continue
            if 0 <= pos <=3700:
                break
            else:
                print("Try Again")

                
        choose_base1 = random.choice(nucleotide_bases) # choose random nucleotide base and add it to sequence
        choose_base2 = random.choice(nucleotide_bases) # choose random nucleotide base and add it to sequence
       
        refseq1 = refseq1[:pos-1]+choose_base1+refseq1[pos:] # insert nucleotide at specified pos. (seq1)
        refseq2 = refseq2[:pos-1]+choose_base2+refseq2[pos:] # insert nucleotide at specified pos.(seq2)

        read_seq1 = refseq1.readlines()
        read_seq2 = refseq2.readlines()           
               
            
        seq1_len = str(len(refseq1))  # length of seq1
        seq2_len = str(len(refseq2))  # length of seq2

       
        print("Seq1 length: " + seq1_len)
        print("Seq2 length: " + seq2_len)
        print("Chosen base seq1: " + choose_base1)
        print("Chosen base seq2: " + choose_base2)
        print("Pos. in sequence " + str(pos))
        print("\n")
      
       
        
    create_seqs()


Wenn ich das Skript ausführe bekomme ich folgende Fehlermeldung.

Traceback (most recent call last):
File "C:\Users\Florian\Desktop\simulate_evolution_SNP.py", line 4, in <module>
class simulate_evolution_SNP():
File "C:\Users\Florian\Desktop\simulate_evolution_SNP.py", line 62, in simulate_evolution_SNP
create_seqs()
File "C:\Users\Florian\Desktop\simulate_evolution_SNP.py", line 35, in create_seqs
refseq1 = refseq1[:pos-1]+choose_base1+refseq1[pos:] # insert nucleotide at specified pos. (seq1)
TypeError: 'file' object is not subscriptable


Ich habe versucht die letzte Fehlermeldung zu googlen, jedoch nichts hilfreiches gefunden. Habt ihr irgendwelche Ideen ?

Vielen Dank im voraus !

VG Flo89
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@Flo89: warum glaubst Du, dass dass man auf ein Dateiobjekt mit Index zugreifen kann? Programmieren ist nicht Raten. Man muß schon lernen, wie man mit Dateien umgeht. Da Du für seq1 und seq2 immer das selbe machst, ist das ein Zeichen dafür, dass Du eigentlich eine Funktion schreiben willst; Klassen sind nicht Dekoration. Wenn es nicht wirklich einen Grund für eine Klasse gibt, brauchst Du auch keine erstellen. »print« kann mit mehreren Argumenten umgehen, das Zusammenstückeln von Strings ist da nur umständlich.
Antworten