Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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
卡滞:Can';t解决Python3.5中的错误索引错误_Python_Python 3.x - Fatal编程技术网

卡滞:Can';t解决Python3.5中的错误索引错误

卡滞:Can';t解决Python3.5中的错误索引错误,python,python-3.x,Python,Python 3.x,以下是我的部分代码(提出问题的部分): 在这一行: GTIN = int(row[0]) 我一直收到错误“IndexError:list index超出范围”,我不知道如何修复它。以下是我试图提取的信息(.txt文件): 错误发生在我修改程序时(删除了两行) 任何帮助都将不胜感激,因为我真的陷入困境。您的csv中似乎有一条错误的或黑线。可以使用try-except表达式处理索引错误 try: GTIN = int(row[0]) product = row[1] pri

以下是我的部分代码(提出问题的部分):

在这一行:

GTIN = int(row[0])
我一直收到错误“IndexError:list index超出范围”,我不知道如何修复它。以下是我试图提取的信息(.txt文件):

错误发生在我修改程序时(删除了两行)


任何帮助都将不胜感激,因为我真的陷入困境。

您的csv中似乎有一条错误的或黑线。可以使用try-except表达式处理索引错误

try:
    GTIN = int(row[0])
    product = row[1]
    price = float(row[2])

    GTINs.append(GTIN) 
    products.append(product)
    prices.append(price)
except IndexError:
    # do something (like "pass" if you don't want that lines)
但是如果要提取列,可以使用
itertools.zip\u longest()

注意:对于丢失的值,可以使用任何其他内容,而不是空字符串。或者,如果不将其传递给函数,它将使用默认值
None

如注释中所述,如果您希望项目为其实际类型,则可以使用以下方法,即使用生成器表达式:

from itertools import zip_longest
with open('list.txt') as csvfile:
    readCSV = csv.reader(csvfile, delimiter = ",")
    rows = ((int(a), b, float(c)) for a, b, c in csv.reader(csvfile))
    GTIN, product, price = zip_longest(*rows, fillvalue="")

您的csv中似乎有一条不正确或黑线。可以使用try-except表达式处理索引错误

try:
    GTIN = int(row[0])
    product = row[1]
    price = float(row[2])

    GTINs.append(GTIN) 
    products.append(product)
    prices.append(price)
except IndexError:
    # do something (like "pass" if you don't want that lines)
但是如果要提取列,可以使用
itertools.zip\u longest()

注意:对于丢失的值,可以使用任何其他内容,而不是空字符串。或者,如果不将其传递给函数,它将使用默认值
None

如注释中所述,如果您希望项目为其实际类型,则可以使用以下方法,即使用生成器表达式:

from itertools import zip_longest
with open('list.txt') as csvfile:
    readCSV = csv.reader(csvfile, delimiter = ",")
    rows = ((int(a), b, float(c)) for a, b, c in csv.reader(csvfile))
    GTIN, product, price = zip_longest(*rows, fillvalue="")

我在这里看到的是一个txt文件,而不是CSV文件。以下是一个简单的解决方案:

GTINs = []
products = []
prices = []
with open('stack.txt','r') as f:
    for line in f:
        sentence = line.split(',')
        GTINs.append(sentence[0])
        products.append(sentence[1])
        prices.append(sentence[2])
print(GTINs)
print(products)
print(prices)
输出为: ['69696961', '55555555', '45632549'] [“牛奶”、“面包”、“奶昔”]
['1.29\n','0.49\n','1.99']

我在这里看到的是一个txt文件,而不是CSV文件。以下是一个简单的解决方案:

GTINs = []
products = []
prices = []
with open('stack.txt','r') as f:
    for line in f:
        sentence = line.split(',')
        GTINs.append(sentence[0])
        products.append(sentence[1])
        prices.append(sentence[2])
print(GTINs)
print(products)
print(prices)
输出为: ['69696961', '55555555', '45632549'] [“牛奶”、“面包”、“奶昔”]

['1.29\n','0.49\n','1.99']

尝试从list.txt文件中删除空行。

尝试从list.txt文件中删除空行。

CSV中的一行是空的。许多CSV编写器编写的文件中最后一行是空的,但存在(倒数第二行包含换行字符)。这意味着没有达到EOF,正如@DanielRoseman所说,末尾有一个空行。在for循环下,您可以添加一个
if row.rstrip():
,然后再进行追加,一个快速修复方法是将
if not row:continue
放在
for
顶部……谢谢,我现在觉得自己像个白痴了。但是,再次感谢,我从未注意到。CSV中某一行的可能重复项为空。许多CSV编写器编写的文件中最后一行为空但存在(倒数第二行包含换行符)。这意味着没有达到EOF,正如@DanielRoseman所说,末尾有一个空行。在for循环下,您可以添加一个
if row.rstrip():
,然后再进行追加,一个快速修复方法是将
if not row:continue
放在
for
顶部……谢谢,我现在觉得自己像个白痴了。但是,再次感谢,我从来没有注意到。@NinjaPuppy的可能重复是什么?@NinjaPuppy确实和
izip()
应该是
zip_longest()
:)。由于类型转换,你可能想做:
rows=((int(a),b,float(c))在csv.reader(csvfile)中为a,b,c)
-然后
zip_longest(*rows…)
instead@NinjaPuppy是的,这是转换类型的最佳方式,但这取决于OP希望对结果做什么。无论如何,我也会用这个命题来更新答案。@Ninjappy那是什么?@Ninjappy确实和
izip()
应该是
zip_longest()
:)。由于类型转换,你可能想做:
rows=((int(a),b,float(c))在csv.reader(csvfile)中a,b,c))
-然后
zip_longest(*rows…)
instead@NinjaPuppy是的,这是转换类型的最佳方式,但这取决于OP希望对结果做什么。无论如何,我也会用这个命题更新答案。