2016-03-28 18 views
1

Aşağıda belirtilen bir dosyada birden çok giriş var. Yukarıdaki metindeFarklı hatlardaki metin değiştirme

"Item_1";"Item_1";"Products///Item///ABC///XYZ";"Item_1.jpg}";"";"Buy item 
<br><strong>Items</strong> 
<br><strong>Time</strong>";"";"";"";"";"";"Category: M[Item]";"";"";"Y";"N";"N";"None";"" 

"Item_2";.... 

, ikinci satırda sonra ilk satırda & yılında "Satın öğesi" 'Güçlü />' sonra yeni satır yoktur.

yapmak istiyorum değişikliğidir - Sonra 3 kayıt eklenirken girdileri & arasında '///' depolayarak sayısına göre bölünmüş hat & tarafından tüm dosya hattını okumaya çalışıyorum

1. Replace Products///Item///ABC///XYZ with Products///ABC///XYZ 
2. Replace "Category: M[Item]" with "Category: M[ABC]" 
3. In case if Entry 1 is Products///Item///ABC or Products///ABC, I dont want to change "Category: M[Item]" with "Category: M[ABC]", just change Products///Item///ABC to Products///ABC 

. Ancak bu, birden çok yeni satıra sahip olduğum için sorunlar yaratıyor.

Normal ifadeyi veya başka bir şeyi kullanarak bunu yapmanın daha basit bir yolu var mı?

+1

csv modülü kullanmak) istediğiniz bu değil eğer, burada elde yorum yapmak istediğim hakkında oldukça emin değilim: https://docs.python.org/3.3/library/csv.html –

cevap

2

gibi @Casimir sen ben ((o yeni satır idare edeceğiz çünkü) bu

import csv 

with open(your_filename) as f: 
    reader = csv.reader(f, delimeter=';', quotechar='"') 

rows = list(reader)  

gibi, dosyanızı ayrıştırmak için csv modülü kullanmak ve sonra çözümlenen sonuca istediğini yapabilirsin, önerilen o

for row in rows: 
    if 'Products///Item///ABC///XY' in row: 
     index = row.index('Products///Item///ABC///XY') 
     row[index] = 'Products///ABC///XYZ' 
     continue # If we replaced the first thing, skip to next row 
    elif 'Category: M[Item]' in row: 
     index = row.index('Category: M[Item]') 
     row[index] = 'Category: M[ABC]' 
+0

Daha @AFH'nin 'Ürünler /// .....' satırı için nelerin bulunduğunu hatırlamaya ihtiyacı var ve t CSV'deki sonraki satırlar için veya tüm CSV'leri okumalı, işlem yapmalı ve gerçekten daha karmaşık mantığa ihtiyaç duyup duymadıklarını yazmalılar. –

+0

Bunu temizlemesini bekleyelim. Ayrıca, yine de nasıl yeni verilerle dosya ayrıştırılacağını (nasıl anladığımı anladım) veriyle nasıl başa çıkılacağı konusunda yardıma ihtiyaç duymayabilir. –

+0

Yardımlarınız için teşekkürler! Parametreleri csv modülünü kullanarak gerektiği gibi değiştirebiliyordum. Şimdi sadece bir engelim var, her satır öğesini kapsayan '' 'istiyorum ama ben sadece tırnak işareti olmadan satırları alıyorum cw = csv.writer (open ("File", "wb"), delimiter = ';', quotechar = '"') cw.writerow (satır) Neredeyim? – AFH

İlgili konular