Python 对于一组字典中的所有字典,如何删除字典值中某个字符后的所有内容?
我的目标是从一组字典中删除值中某个字符后的所有字符 我已从本地计算机导入CSV文件,并使用以下代码打印:Python 对于一组字典中的所有字典,如何删除字典值中某个字符后的所有内容?,python,parsing,dictionary,Python,Parsing,Dictionary,我的目标是从一组字典中删除值中某个字符后的所有字符 我已从本地计算机导入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':'
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
会起作用,因为它只删除空格。我想到的最快的方法是使用rsplit()
好吧,我猜你的问题不在于删除
后面的文本,而在于获取该字符串
什么是“行”?
我猜这是一个只有一个“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]
这应该行得通。
但我真的认为您应该复制整个数据的一个示例(三项就足够了)使用正则表达式:
>>> 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
给定示例代码,在您看来它不起作用,因为您没有保存value.split(“#”)[0]
的结果,请执行以下操作
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
因为它只检查一把钥匙
范例
>>> 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/'}
>>>
你说的split
或rsplit
不起作用。为什么?你能举个简单的例子吗?你知道。*表示任何数量的人都认为这是有效的!我需要更好地使用正则表达式。谢谢你,是的。我相信罗就是字典。这本字典有10个键。在上面的例子中,我只是显示了URL和页面浏览量。我运行上面的程序,只得到if语句中规定的值。需要恢复所有原始目录,仅删除所有过去的#fbid。谢谢你的帮助。运行这个,我得到了一个需要返回的数字的字典。我肯定这是我的问题——只是不确定是什么问题。你想要回字典,对吗?只有条目URL
被修改
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/'}
>>>