klasörler ve csv dosyaları üzerinde Döngü

oy
-2

Ben * N klasörler (Folder001 -..- Folder006) içindeki .csv dosyaları (File001 -..- File010) (sağ altta) son öğe okumak için Python bir senaryo yazmaya çalışıyorum ve (toplam 10 bazı işlemleri yapmak ediyorum 6 = 60 .csv dosyaları). .csv dosyaları sıralar değişkenin numarası var.

komut dosyası için Benim fikrim:

  • N klasör sayısı ve P, her bir klasör içinde .csv dosya sayısı olduğu;
  • klasörü 1 girin (sağ altta) son elemanını okuyup (P elemanlarının) bir listede bunu yazmak için sadece dosyaları .csv P girmek;
  • Bu listedeki tüm öğeleri toplamak ve (N elementlerinin) liste çıkışında sonucu yazma
  • klasörün 2 vs için de yapın ..

Ben döngü içinde .csv dosyasını ve son öğe okumak için biraz yardıma ihtiyaç olacaktır. Birçok mesajları okumak ama maalesef bunları uygulamak mümkün değilim.

N = 6
P = 10

def calculate_output(N, P):
    output = []    
    for i in range(N):        
        for j in range(P):    
            prob = []    
            if FILE NAMES ENDS WITH (.csv) in ./Folder00+str(i+1):    
                prob.append(BOTTOM RIGHT ELEMENT OF THE FILE)    
        output.append(sum(prob[p] for p in range(P)))    
    return output 
Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Çok teşekkür ederim! Biraz bu birinde çözüm modifiye:

N = 6
def calculate_output(N):
    output = []
    for i in range(N):
        prob = []
        dirname = "./Folder00" + str(i+1)
        for filename in os.listdir(dirname):
            if filename.endswith(".csv"):
                with open(os.path.join(dirname, filename)) as csv:
                    for line in csv:
                        pass
                    # line now contains last line
                    prob.append(int(line.rstrip('\n').split(',')[-1]))
        output.append(sum(prob))
    return output

Bu iyi çalışıyor.

Cevap 08/11/2018 saat 14:37
kaynak kullanıcı

oy
0

Ben senin soru değildir çok açıktır korkuyorum, ama böyle bir şey istemek sanırım

import os

N = 6
# P = 10  # ????

def calculate_output(N, P):
    output = []
    for i in range(N):
        dirname = "./Folder00" + str(i+1)
        for filename in os.listdir(dirname):
            probsum = 0
            if filename.endswith(".csv"):
                with open(os.path.join(dirname, filename) as csv:
                    for line in csv:
                        pass
                    # line now contains last line
                    probsum += int(line.rstrip('\n').split(',')[-1])
        output.append(probsum)
    return output

daha sonra her bir klasöre 10 CSV dosyalarını varsa gerçekten bir şey parametre P gerekmez; ama senin kod burada yapmak gerekiyordu ne doğru tahmin tamamen emin değilim. Yukarıda basitçe her dosyada son satırından son virgülle ayrılmış bir alan alır ve bir numaraya bir dizeden dönüştürür. fonksiyon her klasörden sayıların toplamları bir listesini döndürür.

Dosyalar çok büyük, belki son satırı alma mantığını optimize içine bakmak. Bildiğiniz veya son satırı ne olabileceğine dair tahmin makul ise, geri dosyanın birçok bayt sonundan aramaya; örneğin bkz kuyruğuna benzer Python ile bir dosyanın son n hatları, alın

CSV formatında alıntı alanları gibi komplikasyonlar varsa, kullanmak csvreaderyeterlidir virgül üzerinde bölmek yerine teşebbüs.

Cevap 08/11/2018 saat 12:24
kaynak kullanıcı

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