2016-03-24 18 views
0

Bir dosyayı okuyan, bugünün ve dünün tarihini bulduğu ve daha sonra bu iki tarih arasındaki tüm içeriği yazdırdığı bir komut dosyası oluşturmaya çalışıyorum. Ancak, bunu çalıştırmayı denediğimde, son satırda bir karakter arabellek nesnesi bekleniyor.Python bir karakter arabelleği nesnesi bekleniyor

import datetime 
import re 
today = datetime.date.today().day 
yesterday = (today - 1) 
file=open("test.txt","r") 
s = file.read() 
start = today 
end = yesterday 

print((s.split(start))[1].split(end)[0]) 
+2

'.split()' bir tam sayı değil bir dize bekler. – zondo

+0

Neyi başarmaya çalışıyorsunuz? – msw

+0

(s.split (başlangıç)) [1] 'de fazladan parantezlere gerek yoktur ve özellikle çok fazla parantez var, özellikle 'str' eklediyseniz, bu yüzden kaldırmaya değer. Sadece yazın s.split (başlangıç) [1] '. –

cevap

1

start ve end Eğer

print((s.split(str(start)))[1].split(str(end))[0]) 
+0

Çok teşekkürler, çok güzel çalıştı: D – Toasterino

0

start ve end için bir tamsayı

"some5string".split(5) # wont work it needs a string 
"some5string".split("5") # will work 

değişiklik, bir dize bölemezsiniz ... tamsayılar değil dizeleri int s olan yapamam split'a argümanlar olarak geçirilmelidir.

>>> "234".split(3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: expected a character buffer object 

Onları dizelere dönüştürebilirsiniz, ancak bunun yeterli olduğunu düşünmüyorum. Bu muhtemelen ayrıştırma için yeterli veri olmadığı

>>> datetime.date.today().day 
25 

: Sadece bir tarih day alanını kullanarak sadece bir numara değil, tam bir tarih verir. Python'da tarih formatına bakın.

+0

Teşekkürler, ama tarihler için kullandığım dosyalar için sadece sayılar değil, tam tarihler değil :) – Toasterino

+0

Peki umarım gerçekten dikkatli olursunuz ve tercihen sadece bir kez çalıştırıyorsunuzdur yanlış gidebilecek her türlü yol var. Örneğin, dosyalardaki diğer tüm veriler sayı içermemelidir ve dosyalar yalnızca belirli tarih kombinasyonlarını içerebilir (ör. Dosya 29 Şubat'tan 2 Mart'a kadar bir veri içeriyorsa, yalnızca 3 gün) hata bekleyebilirsiniz). –

İlgili konular