2016-03-29 17 views
-2

kapmak için öğelerin sayısını biçimlendirirken bunu kullanın. Bazı nedenlerden ötürü şu anda sadece bir satır alacağım. Bunu yapmak istediğim şey, her bir dizenin uzunluğunu almak için tüm satırları kontrol etmektir, eğer dize uzunluğu < = 8 ise sadece ilk 8 elemanı yakalarsa veya dize uzunluğu> = 8 ilk 10 öğeyi yakalarsa. Herhangi bir yardım büyük takdir edilecektir.Her bir dizenin bir csv satırında uzunluğu nasıl elde edilir?

#example data from Book1.csv 

#hello 
#thisislongerthaneight 
#whatareyoudoing 
#small 



import csv 
import os 
import unicodecsv 

reader = csv.reader(open('Book1.csv', 'rb')) 
writer = csv.writer(open('Book2.csv', 'wb')) 
for row in reader: 
    length = len(row) 
    if length <= 8: 
     newRow = [elem[: 8] 
      for elem in row 
     ] 
    elif length >= 8: 
     newRow = [elem[: 10] 
      for elem in row 
     ] 
    writer.writerow(newRow) 

Yani CurrentY çıkmak ne var, sadece bu ne çıkmak istiyorum csv lib gerekmez bu

hello 
thisislong 
whatareyou 
small 
+0

Kodunuzun girintilerini düzeltin. Girdi verileriniz, biçimlendirilmiş csv gibi görünmüyor. – martineau

+0

Aynı etkiyi denedim. @martineau – Snowman08

+0

Bir kez .writerow() 'ı çalıştırıyorsunuz. Kaç satır yazacağınızı bekliyorsunuz? – Goyo

cevap

1

olduğunu

hello 

olduğunu satır başına bir dize bu yüzden sadece dosyayı açın, her bir dize uzunluğunu değil, bir satır uzunluğunu kontrol edin, dilimleyin ve yazın:

with open('Book1.csv') as f, open('Book2.csv'') as out: 
     out.writelines(s[:8]+ "\n" if len(s) <= 8 else s[:10]+"\n" 
        for s in map(str.rstrip, f)) 

Yeni satırları, dilimlenmiş dizeler için tekrar eklemeniz gerektiğinden kesmeniz gerekir; yoksa, sekiz karakterden daha az olan sözcüklerin sonunda iki yeni satır dolduramazsınız.

satır başına birden fazla kelime vardı ve her kelime için mantık uygulamak isterse:

writer.writerows([s[:8] if len(s) <= 8 else s[:10] for s in row] for row in reader) 

Hem size verecekti:

hello 
thisislong 
whatareyou 
small 

eğer olurdu ikincisi kullanmak tek nedeni Satır başına birden çok virgülle ayrılmış kelime vardı.

+0

Teşekkür ederiz Çok @Padraic Cunningham – Snowman08

+0

@ Snowman41288, hayır prob, rica ederim. –

İlgili konular