Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-索引器有问题:列表索引超出范围_Python - Fatal编程技术网

Python-索引器有问题:列表索引超出范围

Python-索引器有问题:列表索引超出范围,python,Python,提前感谢您的回答。我花了几个小时试图研究我自己对这个问题的答案,但没有结果。我现在征求的是建议,也许不是答案,因为这是一个大学作业问题 我有一个程序,在单行记录中存储一组数据。这保存在名为“sales.txt”的文件中 有一个变量(customerIDInput)是从另一个函数引入的,它基本上就是客户ID 我的程序应该逐行搜索记录,查找索引0中包含“customerIDInput”的所有记录 我得到了一个错误,我认为这是循环的最后一次重复。索引超出范围。我最初认为这是最后一次(\n),因此根本没

提前感谢您的回答。我花了几个小时试图研究我自己对这个问题的答案,但没有结果。我现在征求的是建议,也许不是答案,因为这是一个大学作业问题

我有一个程序,在单行记录中存储一组数据。这保存在名为“sales.txt”的文件中

有一个变量(customerIDInput)是从另一个函数引入的,它基本上就是客户ID

我的程序应该逐行搜索记录,查找索引0中包含“customerIDInput”的所有记录

我得到了一个错误,我认为这是循环的最后一次重复。索引超出范围。我最初认为这是最后一次(\n),因此根本没有任何索引。。。但是,我已经输入了一个rstrip(\n'),问题尚未解决

我意识到我是python新手,答案可能很简单,但我想我已经不知所措了,现在是时候问你们这里的智者了:)

附件是我遇到困难的功能

def searchFile ():

sales = open('sales.txt', 'r')    
transaction = 'START'

while transaction != ' ':

    transaction = sales.readline()
    transactionStrip = transaction.rstrip('\n')        
    transaction_list = transactionStrip.split()

    if transaction_list[0] == str(customerIDInput):    
        customerEntry = transaction_list 
        print('matching records are: ',customerEntry)

sales.close()

在实际尝试获取
事务列表[0]之前,您可以通过调用
if transaction\u list:
(检查其中是否有任何项目)来检查是否存在这样的索引
为避免出现
索引器

文件对象上的
readline
方法将在到达文件末尾时返回空字符串。当您拆分空字符串时,将得到一个空列表,其中没有第一个元素。这就是为什么
transaction\u list[0]
在文件末尾提供了一个
索引器

有几种不同的方法可以解决此问题。靠近当前代码,您可以调整
,而
循环的条件,以查找
事务
为空字符串(而不是带有单个空格的字符串),并读取前面的一行:

transaction = sales.readline()    # read first line
while transaction != "":
    # do stuff with non-empty transaction line

    transaction = sales.readline()  # read next line
但是,对文件中的行进行迭代的更自然的方法是直接在文件对象上使用
for
循环:

for transaction in sales:
    # do stuff

以这种方式迭代将在文件末尾自动停止。

@Samane请不要只删除帖子中的问候语。是的,问候语需要删除,但您是否也可以寻求其他改进?