Heps,
Vertailen kahta listaa. Mikäli listan ensimmäinen indeksi löytyy toisesta listasta, haluaisin kirjoittaa tälle riville tekstiä. Voisin varmaankin toteuttaa tämän dictionaryn avulla. Voiko joku kertoa miksei tämä koodi printtaa mitään?
list1 = [] list2 = [] b = open("WGS_output.txt", "w") d = open("CRC_pairs_10ug.txt", "a+") with open("CRC_WGS.txt") as f: luku = f.readlines() for lines in luku: split = lines.split() for i in split: new = i + "_1" list1.append(new) b.write("%s" %new) b.write("\n") b.close() for items in d: spl = items.split() for items in list1: if spl[0] in items: print items
Voisit nimetä muuttujat paremmin, esim. "luku" ei ole luku vaan tiedoston rivit ja "lines" ei ole monta riviä vaan yksi.
Lopussa käytät samaa items-nimeä kahden sisäkkäisen for-silmukan iteroimiseen, jolloin sisemmässä ei enää pääse käsiksi ulompaan items-nimiseen olioon. Ehkä se on etsimäsi vika.
Muoks: Bugien etsiminen onnistuu helposti, kun tulostat muuttujien sisältöjä ja vertaat tulostusta ajatukseesi siitä, mitä muuttujien pitäisi sisältää.
Esim. jos tiedoston CRC_WGS.txt eka rivi olisi 'a b c', list1:n sisällöksi tulisi ['a_1', 'b_1', 'c_1']. Myöhemmin sitten iteroit tuota listaa ja if-ehtosi on ensimmäisellä suorituskerralla if spl[0] in 'a_1' eli löytyykö CRC_pairs_10ug.txt-tiedoston rivin eka sana merkkijonosta 'a_1'. Sekö on tarkoitus?
Voisin toki nimetä muuttujat paremmin. Nyt nimeäminen on hieman harhaanjohtava.
Muutin loopin jo aiemmin, jolloin 'items' esiintyy vain kerran, mutta lopputulos ei muuttunut.
Chiman kirjoitti:
Esim. jos tiedoston CRC_WGS.txt eka rivi olisi 'a b c', list1:n sisällöksi tulisi ['a_1', 'b_1', 'c_1']. Myöhemmin sitten iteroit tuota listaa ja if-ehtosi on ensimmäisellä suorituskerralla if spl[0] in 'a_1' eli löytyykö CRC_pairs_10ug.txt-tiedoston rivin eka sana merkkijonosta 'a_1'. Sekö on tarkoitus?
Juurikin näin.
Kyllä tuo minulla toimii kuvatusti. Tässä esimerkkitiedostot:
CRC_pairs_10ug.txt:
_ x y 1 2 3
CRC_WGS.txt
a b c d e f
Tulostus:
a_1 b_1 c_1 d_1 e_1 f_1 a_1 b_1 c_1 d_1 e_1 f_1
Koodi kirjottaa tiedoston WGS_output.txt:
a_1 b_1 c_1 d_1 e_1 f_1
Kiitos avusta. Koodi oli lopulta oikein, mutta en huomannut omaa huolimattomuusvirhettäni, ennen kuin aloin sinulle vastausta kirjoittamaan.
Virhe tapahtui kohdassa, jossa loin new-muuttujan. Tämä ei vastannut ainoatakaan CRC_pairs-listan ensimmäistä indeksiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.