Python 为什么我要从for循环中获取索引器?

Python 为什么我要从for循环中获取索引器?,python,for-loop,python-3.7,Python,For Loop,Python 3.7,我正在编写代码,将从csv文件中获取日期和数字值并进行比较 date\u location=3 数字位置=4 打开('file1.csv','r')作为f1: 下一站(f1) 将open('file2.csv','r')作为f2: 下一个(f2) 对于(f1)中的i: f1\u日期=(i.split()[date\u location]) f1\u编号=(i.split()[数字位置]) 对于j in(f2): f2_日期=(j.split()[日期位置]) f2_编号=(j.split()[数

我正在编写代码,将从csv文件中获取日期和数字值并进行比较

date\u location=3
数字位置=4
打开('file1.csv','r')作为f1:
下一站(f1)
将open('file2.csv','r')作为f2:
下一个(f2)
对于(f1)中的i:
f1\u日期=(i.split()[date\u location])
f1\u编号=(i.split()[数字位置])
对于j in(f2):
f2_日期=(j.split()[日期位置])
f2_编号=(j.split()[数字位置])
打印(f1\U日期、f1\U编号)
打印(f2\u日期、f2\u编号)
如果f1\u日期==f2\u日期:
打印(f1\U日期==f2\U日期)
如果f2_编号>f1_编号:
打印('WIN')
持续

elif f2_number发生错误是因为在
i.split()的情况下只有一个元素
但是
date\u location
等于3

您需要根据str.split方法中的csv文件添加分隔符

你可以阅读更多关于它的内容

这在一条线上做了很多事情。我建议您将其分为两行:

f1 = i.split()
f1_number = f1[numeric_location]
f1_date = f1[date_location]
现在,您将看到这些原因中的哪一个导致了问题。您应该添加一个
print(f1)
以查看拆分后的值。很可能它没有你想象的那么多元素。或者您的索引与应该的索引不符。

对i.split()的调用将生成一个新列表,其中将包含字符串i中的每个单词。所以

"this is an example".split() == ["this", "is", "an", "example"]
您正试图访问结果列表的第三个元素,索引错误告诉您该列表的成员少于四个。我建议打印I.split()的结果。很可能这是一个“一个接一个”的错误,或者文件的第一行包含与预期不同的内容


此外,默认情况下,split()将在空白处拆分,因为您有一个csv,您可能希望执行拆分(“,”)。

有两种主要的可能性:

1)您的csv文件不以空格分隔,并且作为
.split()
的默认分隔符是
,在
i.split()
中,您将不会有至少4个空格分隔的项目(或5个用于
数字位置

2)您的csv以空格分隔,但参差不齐,即它有不完整的行,因此对于某些行,第4列没有数据


我还强烈建议使用图书馆来阅读CSV
csv
位于标准库中,
pandas
内置了对不规则线条的处理。

这将有助于了解正在读取的文件中的内容。在这两个文件中都有基本的股市数据,因此,股票代码符号、日期、开盘、收盘、高值和低值如果是csv文件,那么您肯定应该使用
split(','))
。。。但更好的方法是在那一行之前使用moduleadd
print(i.split())
print(date\u location)
,并找出它出错的原因……阅读有关调试代码的提示。或者2或3个元素。OP试图使用索引3和4。我对此表示怀疑,因为他在读取文件时没有添加任何分隔符!我忘了将分隔符添加到
I.split()
谢谢,但是我在使用
.txt
文件处理for循环时,忘了在打开csv时包含
I.split()的分隔符file@user63266很高兴你明白了。我在这里写的内容可以帮助您通过代码查找此类问题。谢谢,这就是最终发生的情况,因为我忘记在调用
I.split()
时包含分隔符,因为我在文本文件中混用for循环,结果忘了为
.split()
包含正确的分隔符,谢谢!另外,这两个文件已经用pandas进行了修改,我更愿意在整个过程中继续使用pandas,但我无法找到一种方法来比较这两个文件,就像我在这里使用pandas一样,
"this is an example".split() == ["this", "is", "an", "example"]