f = open('sentences.txt')
lines = [line.lower() for line in f]
print lines[0:5]
words = re.split("\s+", lines[0:5])
与“打印”它工作得很好,但是当我尝试做re.split()相同的内部,我得到一个错误“类型错误:预期的字符串或缓冲区”如何将列表的多个元素传递给re.split()函数?
f = open('sentences.txt')
lines = [line.lower() for line in f]
print lines[0:5]
words = re.split("\s+", lines[0:5])
与“打印”它工作得很好,但是当我尝试做re.split()相同的内部,我得到一个错误“类型错误:预期的字符串或缓冲区”如何将列表的多个元素传递给re.split()函数?
为什么不干脆:
words = re.split("\s+", ''.join(lines))
split函数需要一个字符串,然后根据正则表达式将其拆分为子字符串并作为列表返回。传递一份清单并不会有太大的意义。如果你希望它把你的字符串列表并单独分割每个字符串元素,然后返回一个字符串列表的列表,你必须做你自己:
lines_split = []
for line in lines:
lines_split.append(re.split("\s+", line))
正如你所看到的,你在函数调用中得到TypeError
,这意味着你正在传递函数所期望的错误参数。所以你需要考虑你传递的是什么。
如果你有一个调试器或IDE您可以逐步看到什么类型的参数有,甚至使用type
打印出来,通过
print(type(lines[0:5]))
返回
<class 'list'>
所以你需要将其转换为字符串。列表中的每个元素都是一个String,所以想办法让每一行都不在列表中。我在哪里使用list comprehension到步骤通过lines
和单独地处理每一行的一个例子是
words = [re.split('\s+', line) for line in lines]
。
你re.split('\s+', line)
是line.split()
相当于所以你可以写
words = [line.split() for line in lines]
也许不是将五个字符串传入'split',而是用五个单独的字符串调用五次split。 – Kevin
你想做什么? –
听起来有点像[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –