2016-04-11 20 views
-1

Dört farklı sütuna sahip çok büyük bir dosyam var. Sütunlardan birinde 'AB', 'BC', 'CA' ve benzeri kodlar bulunur. Her kod için ayrı bir dosya oluşturmak istiyorum. Dört alanın tümünü içeren ancak yalnızca 'AB' kod alanı olan örnek file_AB. Bu konuda yeniyim, ancak mümkünse python kullanarak yapmak isterim. with open("C:/Users/Desktop/JesseData/fileread.txt") as f1: with open("C:/Users/Desktop/JesseData/fileout.txt") as f2: for line in f1: if fourth_attribute == 'CA': f2.write(line)Dosya içeriğinde bulunan kodlara göre ayrı dosya yazma - python

+1

Neden bir deneyin ve yazı vermeyin kolayca doğru dosyaya yazabilir Bu şekilde bazı kod? – Francesco

cevap

0

Sana bunu yapmak için tam bir kod verecek, ama burada bir başlangıç ​​değilim:

Adım 1: Dosya çok büyük olursa Oku dosyayı

, istediğiniz olacak parçaları içinde okumak için. Bunu yapmak için, her yığınta okuduğunuz bir dizi satırı takip edebilir ve ardından bu yineleyici bir limite ulaştığında, verileri ayrı dosyalarınıza dökün. Bir şey gibi:

with open("raw_data.txt", 'r') as f: 
    i = 0 
    data = [] 
    for line if f: 
     data.append(line) #do some formatting here 
     i += 1 
     if i >= THRESHOLD: 
      data_dump(data) 
      data = [] 
      i = 0 

Bu şekilde, tek seferde bellekte dosyanın tamamını sahip önler.

Adım 2: Grup verileriniz data_dump fonksiyonunda

, gruplandırmak verileri isteyeceklerdir. Bu, itertools.groupby() ile en kolay şekilde gerçekleştirilebilir. Bu işlev yinelenebilir ve bir anahtar alır, ardından gruplara ayrılmış bir yineleyici döndürür. groupby() Sıralanmış veri setini bekliyor

groups = itertools.groupby(data, key = lambda x: x[0]) 

Not olduğunu, bu nedenle: Her satır bu satırdaki değerlerle listesidir, ve anahtar ilk giriş olduğu veri biçimlendirilir ederse, gruplama şeklinde görünebilir verileri aynı tuş işleviyle sıralamaya ihtiyaç duyacaktır. Aşağıda groupby

>>> lst = [[1, 2,3],[1,4,5],[2,45,65]] 
>>> import itertools 
>>> groups = itertools.groupby(lst, key = lambda x: x[0]) 
>>> 
>>> for g in groups: 
...  print g[0], list(g[1]) 
... 
1 [[1, 2, 3], [1, 4, 5]] 
2 [[2, 45, 65]] 

3. Adım basit bir örneğidir: Verileri

yazın veri gruplandırılmış sonra, can sadece grupları aracılığıyla döngü ve karşılık gelen çıkış dosyasına veri ekle. Ben dosyanın bir sözlük tutulması tavsiye ediyorum kolları:

d = {"AB": open("AB.txt", 'a'), "BC", ....} 

senin döngüler arasında durmadan size döngü

+0

Bu kadar detaylı bir açıklama için çok teşekkür ederim. Dosyam bir liste değil, ";" ile ayrılan öznitelikleri içerir. Yani, sınırlayıcı kullanarak grup olabilir bir yolu var. – yatri