Python 为什么我要从for循环中获取索引器?
我正在编写代码,将从csv文件中获取日期和数字值并进行比较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()[数
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列没有数据
我还强烈建议使用图书馆来阅读CSVcsv
位于标准库中,pandas
内置了对不规则线条的处理。这将有助于了解正在读取的文件中的内容。在这两个文件中都有基本的股市数据,因此,股票代码符号、日期、开盘、收盘、高值和低值如果是csv文件,那么您肯定应该使用split(','))
。。。但更好的方法是在那一行之前使用moduleaddprint(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"]