2016-01-21 56 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

相关问题