【问题标题】:Split unicode by character into list按字符拆分 unicode 到列表中
【发布时间】:2020-12-11 19:45:09
【问题描述】:

我制作了一个程序,可以读取一组名称,然后将其转换为 Unicode 示例

StevensJohn:-:
WasouskiMike:-:
TimebombTime:-:
etc

有什么方法可以创建一个列表来拆分索引,就像它一样

example_list = ["StevensJohn", "WasouskiMike", "TimebombTim"] 

这将是动态的,因此将从网络抓取中返回名称和不同名称的数量。

我们将不胜感激。

代码

results = unicode("""
Hospitality
Customer Care
Wick , John 12:00-20:00
Wick , John 10:00-17:00
Obama , Barack 06:00-14:00
Musk , Elon 07:00-15:00
Wasouski , Mike 06:30-14:30
 Production
Fries
Piper , Billie 12:00-20:00
Tennent , David 06:30-14:30
Telsa, Nikola 11:45-17:00
Beverages & Desserts in a Dual Lane Drive-thru with a split beverage cell
Timebomb , Tim 06:30-14:30
Freeman , Matt 08:00-16:00
Cool , Tre 11:45-17:00
Sausage
Prestly , Elvis 06:30-14:30
Fat , Mike 06:30-14:30
Knoxville , Johnny 06:00-14:00
Man , Wee 05:00-12:00
Heartness , Jack 09:00-16:00
Breakfast BOP
Schofield , Phillip 06:30-14:15
Burns , George 06:30-14:15
Johnson , Boris 06:30-14:30
Milliband, Edd 06:30-14:30
Trump , Donald 10:00-17:00
Biden , Joe 08:00-16:00
Tempering & Prep
Clinton , Hillary 11:00-19:00

""")

for span in results:
    results = results.replace(',', '')
    results = results.replace(" ", "")
    results = results.replace("/r","")
    results = results.replace(":-:", "\r")
    results = ''.join([i for i in results if not i.isdigit()])
    print(results)

【问题讨论】:

  • 不清楚你在问什么。 Python 3 中的字符串 Unicode 字符串。如果文件中有这些行,open(filename).readlines() 会将它们作为列表返回(不清楚为什么每个都有:-: 后缀,但修剪掉应该是微不足道的,而且似乎不是您要问的问题)。
  • 如果确实如此,lines.split(':-:') 会在该字符串上拆分,但是您必须在每个项目之前清理换行符。
  • Unicode 取自网络抓取,因此它不是来自文件。我试过 lines.split(':-:') 它没有产生我需要的输出。
  • 然后向我们展示您的尝试、问题所在以及您为排除故障所做的工作。可能还会查看我们提供 minimal reproducible example 的指南。
  • 代码现在在原始帖子中编辑对不起我对编码很陌生,由于数据保护,它不是来自网络抓取的确切数据,但它非常接近我刚刚编辑了名称

标签: python python-3.x indexing python-unicode list-manipulation


【解决方案1】:


import re

input = 'StevensJohn:-:\nWasouskiMike:-:\nTimebombTime:-:\n'

class Names:
    def __init__(self, input, delimiter=':-:\n'):
        self.names = [ x for x in re.split(delimiter, input) if x ]
        self.diffrent_names = set(self.names)

    def number_of_names(self):
        return len(self.names)

    def number_of_diffrent_names(self):
        return len(self.diffrent_names)

    def __str__(self):
        return str(self.names)

names = Names(input)
print(names)
print(names.number_of_names())
print(names.number_of_diffrent_names())

【讨论】:

  • 感谢您的回复,我会在完成当天的作业并更新线程时整合它
【解决方案2】:
unicode_ex = 'StevensJohn:-:\nWasouskiMike:-:\nTimebombTime:-:\n'
splitted = [name.replace(" ", "") for name in unicode_ex.split(":-:\n") if name]
print(splitted)

输出

['StevensJohn', 'WasouskiMike', 'TimebombTime']

【讨论】:

  • TypeError: 需要一个字符串或其他字符缓冲区对象
  • 你能指定在哪里定义或导入unicode吗?
  • 上面的示例(有问题)显示了我定义 unicode 的位置
【解决方案3】:

您的编辑显示这确实是XY problem。您连续修剪小子串的尝试将不可避免地遇到一些不应该删除某些子串的极端情况。一种常见的替代方法是使用正则表达式。

import re
matches=[''.join([m.group(1), m.group(2)]) for m in re.iterfind(r"([A-Za-z']+)\s*,\s*([A-Za-z'.]+)\s+\d+:\d+-\d+:\d+", results)]

演示:https://ideone.com/1syge8

更好的解决方案仍然是使用周围 HTML 的结构来仅提取特定的跨度;大多数现代网站都使用 CSS 选择器进行格式化,这对于抓取也非常有用。但由于我们看不到您提取此字符串的原始页面,这完全是推测性的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多