2016-01-01 70 views
0

我正在製作一個新的Facebook配置文件,只是想開始新鮮,而不必去遍歷所有內容並以untagging,刪除等方式......但是我想保持我的聯繫。 我有一個.txt文件中的所有聯繫人列表,因爲如果您要求,facebook提供了列表。我們的想法是把所有的名字爲csv文件的Gmail,然後導入Gmail聯繫人到新的Facebook的個人主頁使用python製作Facebook朋友的cvs文件以導入新配置文件

它以這種形式,但是有超過700名:

Sander Krabbendam 
Jonatan Silva ([email protected]) 
Jesus A. Peñaloza 
Tim Travell 

我寫了一個程序將其與其他分離第一名稱,並刪除郵件,如果有也是電子郵件在上面了Jonatan的名字:

check = open('names.txt') 
lsNames = list() 
lsLastnames = list() 

for line in check: 
    line = line.strip() #.decode('string_escape') 
    word = line.split() 
    lsNames.append(word[0]) 
    lsLastnames.append(word[1:]) 
    for lastname in lsLastnames: 
     for str in lastname: 
      for char in str: 
       if char == '@': 
        lastname.pop() 

所以lsNames有1名和lsLastnames有沒有電子郵件的其餘部分。 我需要知道如何傳遞到該Gmail中接受csv格式: gmail csv format for contacts

問題也是一些名稱有很奇怪的解碼,因爲我打開文件(這是在lsLastnames以上,現在的名字, Peñaloza現在是Pe\xc3\xb1aloza:!

['Krabbendam'] 
['Silva'] 
['A.', 'Pe\xc3\xb1aloza'] 
['Travell'] 

我需要的是把姓和名與拉丁文字符在一個excel風格形式的相應的A和B柱 請幫助我的蟒蛇的知識仍然非常有限!

+0

什麼列C..are你也從你的代碼生成它...或者你不需要它?......只有A和B ..? –

+0

Gmail只需要這種格式將所有名稱放在聯繫人列表中,然後如果c列在那裏只是將電子郵件添加到每個人,但因爲我只是想用於導入所有名稱到Facebook,所以我不認爲它真的有必要 – Bizarre

回答

1

嘗試這樣:

import csv 
import sys 

with open('myContactList.csv', 'wt') as f: 
     writer = csv.writer(f) 
     writer.writerow(('First Name', 'Last Name')) 
     for a, b in zip(lsNames, lsLastnames): 
      writer.writerow((a, ' '.join(map(lambda s:s.decode('utf-8'),b))) 

我在第二排使用join爲您呈現其中的姓可以有兩個字符串的情況下:

'A.''Peñaloza'

,然後應用utf-8解碼,以獲得正確的unicode字符,例如:

>>> l = ['A.', 'Pe\xc3\xb1aloza'] 
>>> ''.join(map(lambda s:s.decode('utf-8'), l)) 
u'A.Pe\xf1aloza' 
>>> print ''.join(map(lambda s:s.decode('utf-8'), l)) 
A.Peñaloza 

編輯:由於改善你的代碼

with open('names.txt', 'r') as check: 
    lsNames = list() 
    lsLastnames = list() 

    for line in check: 
     word = line.rstrip().split() 
     for item in word[::-1]: #start looking from last item for quick search 
      if '@' in item: 
       word.remove(item) 
     lsNames.append(word[0]) 
     if len(word[1:]) > 1: #Last Name with two strings 
      lsLastnames.append(' '.join(word[1:])) 
     else: 
      lsLastnames.append(word[1]) 

with open('myContactList.csv', 'wt') as f: 
     writer = csv.writer(f) 
     writer.writerow(('First Name', 'Last Name')) 
     for a, b in zip(lsNames, lsLastnames): 
      writer.writerow((a.decode('utf-8'), b.decode('utf-8'))) 
+0

令人驚歎!在預覽中,即使編碼也看起來很完美!編碼固定在哪裏!?但只要一件事情,當在Excel中打開時,一切似乎都寫在A列中。我明天會嘗試上傳到Gmail,因爲我的時區很晚。非常感謝Iron Fist,對我的追求已經有了很大的進步:) – Bizarre

+0

@Bizzare ..沒有pblm ...如果您對我的回答滿意,請考慮接受 –

+0

完成!將現在嘗試。只是一件事,你會推薦一種方法,我可以清理我的代碼,以刪除電子郵件字符串,如果有來自lsLastnames?而不是我的3嵌套for循環?也許列表理解或重新? – Bizarre

0

您需要將您的字符串存儲在UTF-8 encoding中。

+0

我該怎麼做?我嘗試使用.decode('utf-8')和.decode('string_escape'),但它們看起來仍然很奇怪 – Bizarre

+0

@Bizarre - '.decode('utf-8')'應該這樣做。查看鐵拳的更新答案。 –