在Python中拆分不均匀间隔列

时间:2016-07-09 05:25:55

标签: python split

我尝试使用以下程序

import os

HOME= os.getcwd()

STORE_INFO_FILE = os.path.join(HOME,'storeInfo')  

def searchStr(STORE_INFO_FILE, storeId):
    with open (STORE_INFO_FILE, 'r') as storeInfoFile:
        for storeLine in storeInfoFile:
##          print storeLine.split(r'\s+')[0]
            if storeLine.split()[0] == storeId: 
                print storeLine

searchStr(STORE_INFO_FILE, 'Star001')

文件中的示例行:

  

Star001 Sunnyvale 9.00 USD Los_angeles / America sunnvaleStarb@startb.com

但是它给出了以下错误

  

./ searchStore.py Traceback(最近一次调用最后一次):文件   " ./ searchStore.py",第21行,in       searchStr(STORE_INFO_FILE,' Star001')文件" ./ searchStore.py",第17行,在searchStr中       如果storeLine.split()[0] == storeId:IndexError:列表索引超出范围

我尝试在命令行上使用分割功能进行打印,然后我就能打印出来了。

2 个答案:

答案 0 :(得分:2)

您的文件中显示空行或空行:

>>> 'abc def hij\n'.split()
['abc', 'def', 'hij']
>>> '     \n'.split()    # a blank line containing white space
[]
>>> '\n'.split()         # an empty line
[]

最后两个案例表明split()可以返回一个空列表。尝试索引该列表会引发异常:

>>> '\n'.split()[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

您可以通过检查空行和空行来解决问题。试试这段代码:

def searchStr(store_info_file, store_id):
    with open (store_info_file) as f:
        for line in f:
            if line.strip() and (line.split()[0] == store_id): 
                print line

添加line.strip()可以忽略空行和仅包含空格的行。

答案 1 :(得分:0)

如果split方法返回空列表,则代码有问题。 您可以更改调用split方法的代码并添加错误处理代码。

可以完成以下

storeLineWords = storeLine.split()
if len(storeLineWords) > 0 and storeLineWords[0] == storeId: