2016-01-21 106 views
2

我的目標是從一組詞典中刪除某個字符後的所有字符。如何刪除字典組中字典值中某個字符後的所有字典組中所有字典的所有內容?

我已匯入我的本地機器一個CSV文件和打印使用下面的代碼:

import csv 
with open('C:\Users\xxxxx\Desktop\Aug_raw_Page.csv') as csvfile: 
    reader=csv.DictReader(csvfile) 
    for row in reader: 
     print row 

我得到一套目錄,看起來像:

{Pageviews_Aug':'145', 'URL':'http://www.domain.com/#fbid=12345'} 

對於包含任何目錄一個值爲#fbid,我試圖刪除#fbid及之後的任何字符 - 對於所有這些爲真的目錄。

我曾嘗試:

for key,value in row.items(): 
     if key == 'URL' and '#' in value or 'fbid' in value 
      value.split('#')[0] 
      print row 

沒有工作。

不要以爲rsplit將工作,因爲它只能刪除空白。我想

+0

你說'split'或'rsplit'不起作用。爲什麼?你能舉一個簡單的例子嗎? – tglaria

回答

4

最快的方式有關使用rsplit()

out = text.rsplit('#fbid')[0] 

好了,所以我猜你的問題不是在消除自帶AFER的#,但在得到該字符串的文本。

什麼是「行」? 我猜這是一個單一的'URL'鍵的字典,我錯了嗎?

for key,value in row.items(): 
    if key == 'URL' and '#fbid' in value: 
     print value.split('#')[0] 

我不太讓你的數據的全格式。 如果你想在你的字典編輯一個變量,你沒有通過所有的項目迭代:

if 'URL' in row.keys(): 
    if '#fbid' in row['URL']: 
     row['URL'] = row['URL'].rsplit('#fbid')[0] 

這應該工作。 但我真的覺得你應該複製你的整個數據的例子(三個項目就足夠了)

+0

是的。我相信排是詞典。該字典有10個鍵。我只是在上面的例子中顯示了URL和Pageviews_Aug。我運行上面的代碼,只獲取if語句中規定的值。需要取回所有原始目錄,只刪除#fbid過去的所有內容。感謝你的協助。 – iburvt

0

使用正則表達式:

>>> import re 
>>> value = 'http://www.domain.com/#fbid=12345' 
>>> re.sub(ur'#fbid.*','',value) 
'http://www.domain.com/' 
>>> value = 'http://www.domain.com/' 
>>> re.sub(ur'#fbid.*','',value) 
'http://www.domain.com/' 

爲您的代碼,你可以做這樣的事情來獲得像以前一樣以相同的格式回答:

import csv 
with open('C:\Users\xxxxx\Desktop\Aug_raw_Page.csv') as csvfile: 
    reader=csv.DictReader(csvfile) 
    for row in reader: 
     row['URL'] = re.sub(ur'#fbid.*','',row['URL']) 
     print row 
+0

就這麼你知道。*意味着任何數字的任何字符 – dabhand

+0

我認爲這工作!我需要用正則表達式來改善。謝謝你。 – iburvt

0

給你的示例代碼,它看起來你不工作,因爲你不救的value.split('#')[0]的結果,這樣做mething像

for key,value in row.items(): 
    if key == 'URL' and '#' in value or 'fbid' in value 
     new_value = value.split('#')[0] # <-- here save the result of split in new_value 
     row[key] = new_value    # <-- here update the dict row 
print row        # instead of print each time, print it once at the end of the operation 

這可以簡化爲

if '#fbid' in row['URL']: 
    row['URL'] = row['URL'].split('#fbid')[0] 

,因爲它只檢查一個關鍵。

例如

>>> row={'Pageviews_Aug':'145', 'URL':'http://www.domain.com/#fbid=12345'} 
>>> if "#fbid" in row["URL"]: 
     row["URL"] = row['URL'].split("#fbid")[0] 


>>> row 
{'Pageviews_Aug': '145', 'URL': 'http://www.domain.com/'} 
>>> 
+0

嗯。運行這個,我得到一個我需要返回的數字的字典。我確定這是我的問題 - 只是不確定它是什麼。 – iburvt

+0

你想要字典嗎?只有這個條目'URL'被修改 – Copperfield