2014-01-21 5 views
0

다음은 Facebook을 쿼리하는 코드입니다.문자열 개체 크기 함수

실제 메시지의 전체 크기를 980 varchar로 제한하고 싶습니다.

def write_csv(fname, rows, header=None, append=False, **kwargs): 
    filemode = 'ab' if append else 'wb' 
    with open(fname, filemode) as outf: 
     out_csv = csv.writer(outf, **kwargs) 
     if header: 
      out_csv.writerow(header) 
     out_csv.writerows(rows) 

def main(): 
    ts = FacebookSearch() 
    data = ts.search('appliance') 
    js = json.loads(data) 

    messages = ([msg['created_time'], msg.get('message', 'Key "message" is not present.').replace('\n', '').encode('utf8'), msg['from']['id']] for msg in js.get('data', [])) 
    #def messages(s, l): ## breaks here 
     #return s if len(s)<=l else s[0:l-3]+'...' ## Breaks here 



    write_csv('fb_washerdryer.csv', messages, append=True) 


if __name__ == '__main__': 
    main() 

나는 나의 함수 내에서 그것을 정의하는 위의 시도했지만이 오류가있어 :

Traceback (most recent call last): 
    File "./facebook_washer_dryer8.sh", line 52, in <module> 
    main() 
    File "./facebook_washer_dryer8.sh", line 48, in main 
    write_csv('fb_washerdryer.csv', messages, append=True) 
    File "./facebook_washer_dryer8.sh", line 35, in write_csv 
    out_csv.writerows(rows) 
TypeError: writerows() argument must be iterable 

은 내가 옳은 일을했지만 지금은 조금 혼란 스러워요 생각합니다.

+0

귀하의 추적 질문, 즉'write_csv에 포함되지 않은 코드를 참조하는 것 같다 그래' – mhlester

+0

('fb_washerdryer.csv', 메시지를 = TRUE를 추가) 그것이 바로 csv에 쓰는 곳입니다. – user2748540

+0

'rows'의 값은 무엇입니까? – aIKid

답변

0

나는 이것이 당신이 원하는 생각 :

... 
#Create the shortening function 
def short_message(s, l): 
     #return s if len(s)<=l else s[0:l-3]+'...' 
#define a variable to be shortened if too long 
mess = msg.get('message', 'Key "message" is not present.').replace('\n', '').encode('utf8') 
#pass the shortened message 
write_csv('fb_washerdryer.csv', short_message(mess, 980), append=True)