我尝试使用以下程序
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:列表索引超出范围
我尝试在命令行上使用分割功能进行打印,然后我就能打印出来了。
答案 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: