συνοψίζει τα δύο αρχεία κειμένου και να κάνει ένα νέο στην Python

ψήφοι
1

Έχω 2 αρχείο κειμένου, όπως τα ακόλουθα παραδείγματα. Θα αναφέρουμε ένα από τα πρώτα (χωρισμένες με κόμμα) και το άλλο ένα δευτερόλεπτο (καρτέλα χωρίζεται).

first:

chr1,105000000,105310000,2,1,3,2
chr1,5310000,5960000,2,1,5,4
chr1,1580000,1180000,4,1,5,3
chr19,107180000,107680000,1,1,5,4
chr1,7680000,8300000,3,1,1,2
chr1,109220000,110070000,4,2,3,3
chr1,11060000,12070000,6,2,7,4

second:

AKAP8L  chr19   107180100   107650000   transcript
AKAP8L  chr19   15514130    15529799    transcript
AKIRIN2 chr6    88384790    88411927    transcript
AKIRIN2 chr6    88410228    88411243    transcript
AKT3    chr1    105002000   105010000   transcript
AKT3    chr1    243663021   244006886   transcript
AKT3    chr1    243665065   244013430   transcript

στις first fileστήλες 2και 3είναι startκαι end. στη second fileστήλη 3και 4οι αρχίζουν και τελειώνουν αντίστοιχα. Θέλω να κάνω ένα νέο αρχείο κειμένου τόσο από την πρώτη και τη δεύτερη αρχεία. στην πραγματικότητα, θέλω να επιλέξετε ορισμένες γραμμές από το αρχείο πρώτα εάν:

1- the 1st column in file first is equal to 2nd column in file second.
2- the 3rd column in the file second is greater than the the 2nd column in the file first and also smaller than the 3rd column in the file first.
3- the 4th column in the file second should be also greater than the the 2nd column in the file first and also smaller than the 3rd column in the file first.

στο νέο αρχείο που θα προσθέσει 2 νέες στήλες που ονομάζεται IDκαι countκαι ουσιαστικά θα μετρήσει τον αριθμό των γραμμών στο αρχείο δεύτερο που έχουν τις παραπάνω 3 συνθήκες. για το ID θα χρησιμοποιήσω την 1η γραμμή του δεύτερου αρχείου που αντιστοιχεί σε μία από τις γραμμές στο αρχείο για πρώτη φορά. με άλλα λόγια, θέλω να μετρήσει τον αριθμό των γραμμών στο αρχείο δεύτερο που ταιριάζουν σε κάθε γραμμή στο αρχείο την πρώτη σύμφωνα με τις 3 παραπάνω συνθήκες. η αναμενόμενη παραγωγή για το παράδειγμα θα μοιάζει με το εξής:

chr19,107180000,107680000,1,1,5,4,AKAP8L, 1
chr1,105000000,105310000,2,1,3,2, AKT3, 1

σε αυτή την αναμενόμενη απόδοση, οι 1ο 7 στήλες είναι από το αρχείο πρώτη ANF την 8η στήλη είναι το αναγνωριστικό (το οποίο έχει ληφθεί δώθε το δεύτερο αρχείο) και η 9η στήλη είναι ο αριθμός (του αριθμού των γραμμών στο αρχείο δεύτερο που ταιριάζει σε αυτά συγκεκριμένη γραμμή στο αρχείο πρώτα).

Προσπαθώ να το κάνουμε αυτό σε python και έγραψε τον κώδικα, αλλά δεν θα επιστρέψει αυτό που ψάχνω.

first = open('first.csv', 'rb')
second = open('second.txt', 'rb')
first_file = []
for line in first:
    first_file.append(line.split(','))

second_file = []
for line2 in second:
    second_file.append(line.split())

count=0
final = []
for i in range(len(first_file)):
    for j in range(len(second_file)):
        first_row = first_file[i]
        second_row = second_file[j]
        first_col = first_row.split()
        second_col = second_row.split()
        if first_col[0] == second_col[1] and first_col[1] < second_col[2] < first_col[2] and first_col[1] < second_col[3] < first_col[2]
            count+=1
            final.append(first_col[i]+second_col[0]+count)
Δημοσιεύθηκε 08/11/2018 στις 00:08
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Δεν καταλαβαίνω πραγματικά την ανάγκη countτου αριθμού, διότι, όσο μπορώ να καταλάβω, αυτό ακριβώς φαίνεται σαν ένα δείκτη σειρά. Είναι που περιλαμβάνονται στον παρακάτω κώδικα και τα σχόλια (μόνο αποσχολιάστε αν θέλετε να χρησιμοποιήσετε count). Σε σας ifδήλωση, συγκρίνετε τιμές ως χορδές, δεν είναι ακέραιοι, οπότε θα πρέπει να τα ρίξει σε ακέραιους αριθμούς πρώτο. Στα επιχειρήματα υπέρ της append, προσπαθείτε να ενώσετε ενιαία στοιχεία, που δεν λειτουργεί. Απλά τους τυλίξτε γύρω από αγκύλες. Επίσης, δεν υπάρχει καμία ανάγκη να ανοίξει απλού κειμένου αρχεία ως δυαδικά.

Θα χρησιμοποιηθεί για την csvενότητα, η οποία κατά τη γνώμη μου, απλοποιεί. Επίσης, δεν υπάρχει τίποτα λάθος με τον τρόπο που επαναλάβει πάνω από τα στοιχεία, αλλά είναι συνήθως πιο εύκολο στη χρήση for item in mylist, αντί for i in range(len(mylist)): item = mylist[i]Τέλος πάντων, δοκιμάστε το εξής:

import csv

with open('first.csv', 'r') as firstfile, open('second.txt', 'r') as secondfile:
    first = list(csv.reader(firstfile))
    second = list(csv.reader(secondfile, delimiter='\t'))

final = []
#count = 0

for row1 in first:
    for row2 in second:
        if (row1[0] == row2[1] and int(row1[2]) > int(row2[2]) > int(row1[1])
                and int(row1[2]) > int(row2[3]) > int(row1[1])):
            final.append(row1 + [row2[0]])
            #count += 1
            #final.append(row1 + [row2[0]] + [count])

with open('output.txt', 'w') as outfile:
    outwriter = csv.writer(outfile)
    outwriter.writerows(final)
Απαντήθηκε 08/11/2018 στις 01:38
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more