卡滞: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希望对结果做什么。无论如何,我也会用这个命题更新答案。