【问题标题】:(Python) Identify the missing character and replace with NA(Python) 识别缺失的字符并替换为 NA
【发布时间】:2017-06-30 16:25:27
【问题描述】:
my_string = "        Name         Last_Name              Place"
my_string_another = "Aman         Raparia                India"

我在上面提供了两个字符串,这不是 CSV 的输出。目前我正在做的是读取第一个字符串并转换为这样的列表

my_string = my_string.strip("\r\n")
my_string = my_string.split(" ")
my_string[:] = [elem for elem in my_string if elem != ""]

的格式提供输出
my_string = ['Name', 'Last_Name', 'Place']

类似地,我为 my_string_another 执行此操作以生成另一个列表

my_another_string = ["Aman", "Raparia", "India"]

因此我可以轻松创建一个 dict 对象。

当 my_string_another 缺少以下字段之一时会出现问题:-

my_string_another = "Aman                             India"

当我使用相同的逻辑将 my_string_another 转换为它产生的列表时

my_string_another = ["Aman", "India"]

所以当我将它们映射在一起时,它将被映射到姓氏,而不是地点。

有没有办法可以得到以下格式的输出:-

 my_another_string = ["Aman", "NA", "India"]

这样当我映射两个字符串时,它们会正确匹配。

【问题讨论】:

    标签: regex python-2.7 list


    【解决方案1】:

    你可以使用re module:

    >>> import re
    >>> my_string = "        Name         Last_Name              Place"
    >>> my_string_another = "Aman         Raparia                India"
    >>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string).groups()
    ('Name', 'Last_Name', 'Place')
    >>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups()
    ('Aman', 'Raparia', 'India')
    >>> my_string_another = "Aman                             India"
    >>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups()
    ('Aman', '', 'India')
    

    这大致意思是:捕获三组非空白字符。中间是可选的。

    然后您可以使用列表推导通过 NA 更改空字符串:

    >>> m = re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups()
    >>> m = [i if i else 'NA' for i in m]
    >>> m
    ['Aman', 'NA', 'India']
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 2014-06-13
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多