Python 尝试拆分字符串列表时出现剥离和拆分问题
Python problems with strip and split while trying to split up a list of strings
我的基本问题是:我有一个很大的文本文件,我试图访问每一行的前 3 条信息。例如,
Line 1: blah1 blah2 blah3 blah4
Line 2: blah1 blah2 blah3 blah4
...
Line n: blah1 blah2 blah3 blah4
然而,在我将原始文本拆分成这些行之后,我的结果是 ['blah1 blah2 blah3 blah4', 'blah1 blah2 blah3 blah4', ...']
,但我想要的是 ['blah1', 'blah2', 'blah3', 'blah4'], ['blah1', 'blah2', 'blah3', 'blah4']
,而不仅仅是一个巨大的列表 ['blah1', 'blah2', 'blah3', 'blah4', 'blah1', 'blah2' ...]
我的问题是,虽然我知道 split
用于行而 strip
用于字符串,但当我使用 split
时,它只是将所有内容混合在一起(例如一个巨大的列表['blah1', 'blah2', 'blah3', 'blah4', 'blah1', 'blah2' ...]
)
这是我的
f = open('file.txt')
raw = f.read()
raw = raw.lower()
l = raw.splitlines()
l = [re.sub(r'\t', ' ', l) for l in l] #replace tabs
l1 =[]
for elem in l:
l1.extend(elem.strip().split(' '))
print l1
f.close()
我看了很多其他人关于 split
和 strip
的 questions/answers,我认为我的一些问题可能是我的初始代码将文本拆分为行,从而给了我要处理的列表,实际上,我的每一行仍然是我需要分解的字符串而不是列表,但是由于 python 语法,我必须使用字符串作为如果它是一个列表。拜托,如果您能给我任何有助于我理解我的问题是什么以及如何解决它的建议,我们将不胜感激。
您需要使用 append
而不是 extend
:
for elem in l:
l1.append(elem.strip().split(' '))
append
将参数视为单个项目。 extend
将参数视为另一个类似列表的对象(或更准确地说,一个可迭代对象),遍历它并将项目一项一项添加到原始列表中。
除了在您应该使用 append 时使用 extend 之外,您的整个代码可能会变成两行,因为您做了太多不必要的工作:
with open('file.txt') as f:
lines = [line.lower().rstrip().split() for line in f]
str.split
将很好地处理制表符,因此不需要用空格替换它们,并且在任何情况下使用正则表达式替换它们都是过大的。
您不需要将整个文件内容读入内存,您可以简单地在列表中创建您的列表列表 comp 遍历文件对象调用 lower 并在每一行上拆分。
我的基本问题是:我有一个很大的文本文件,我试图访问每一行的前 3 条信息。例如,
Line 1: blah1 blah2 blah3 blah4
Line 2: blah1 blah2 blah3 blah4
...
Line n: blah1 blah2 blah3 blah4
然而,在我将原始文本拆分成这些行之后,我的结果是 ['blah1 blah2 blah3 blah4', 'blah1 blah2 blah3 blah4', ...']
,但我想要的是 ['blah1', 'blah2', 'blah3', 'blah4'], ['blah1', 'blah2', 'blah3', 'blah4']
,而不仅仅是一个巨大的列表 ['blah1', 'blah2', 'blah3', 'blah4', 'blah1', 'blah2' ...]
我的问题是,虽然我知道 split
用于行而 strip
用于字符串,但当我使用 split
时,它只是将所有内容混合在一起(例如一个巨大的列表['blah1', 'blah2', 'blah3', 'blah4', 'blah1', 'blah2' ...]
)
这是我的
f = open('file.txt')
raw = f.read()
raw = raw.lower()
l = raw.splitlines()
l = [re.sub(r'\t', ' ', l) for l in l] #replace tabs
l1 =[]
for elem in l:
l1.extend(elem.strip().split(' '))
print l1
f.close()
我看了很多其他人关于 split
和 strip
的 questions/answers,我认为我的一些问题可能是我的初始代码将文本拆分为行,从而给了我要处理的列表,实际上,我的每一行仍然是我需要分解的字符串而不是列表,但是由于 python 语法,我必须使用字符串作为如果它是一个列表。拜托,如果您能给我任何有助于我理解我的问题是什么以及如何解决它的建议,我们将不胜感激。
您需要使用 append
而不是 extend
:
for elem in l:
l1.append(elem.strip().split(' '))
append
将参数视为单个项目。 extend
将参数视为另一个类似列表的对象(或更准确地说,一个可迭代对象),遍历它并将项目一项一项添加到原始列表中。
除了在您应该使用 append 时使用 extend 之外,您的整个代码可能会变成两行,因为您做了太多不必要的工作:
with open('file.txt') as f:
lines = [line.lower().rstrip().split() for line in f]
str.split
将很好地处理制表符,因此不需要用空格替换它们,并且在任何情况下使用正则表达式替换它们都是过大的。
您不需要将整个文件内容读入内存,您可以简单地在列表中创建您的列表列表 comp 遍历文件对象调用 lower 并在每一行上拆分。