Python 如何根据长度选择csv文件中的行?

Python 如何根据长度选择csv文件中的行?,python,list,csv,for-loop,if-statement,Python,List,Csv,For Loop,If Statement,我正在尝试根据行的长度选择行。我的csv文件中的一些行有5个项目,一些有20个项目,一些有40个项目。我想收集所有的行,如果它们的长度在24和34之间。所以我尝试了以下代码: my_path = r'c:\data\FF\Desktop\my_files' for file in os.listdir(my_path): path_file = os.path.join(my_path, file) with open(path_file, 'r') as output:

我正在尝试根据行的长度选择行。我的csv文件中的一些行有5个项目,一些有20个项目,一些有40个项目。我想收集所有的行,如果它们的长度在24和34之间。所以我尝试了以下代码:

my_path = r'c:\data\FF\Desktop\my_files' 

for file in os.listdir(my_path):
    path_file = os.path.join(my_path, file)
    with open(path_file, 'r') as output:
        reader = csv.reader(output, delimiter = ',')
        read = [row for row in reader if row] 
        for row in read:
            if len(row) > 24 or len(row) < 34:
                if row[9] == '3080':
                    print(row[0] + ',' + row[24] + ',' + row[25] + ',' 
                          + row[26] + ',' + row[27] + ',' + row[28] + ',' + row[29]
                          + ',' + row[30] + ',' + row[31] + ',' + row[32] + ',' + row[33] + ','
                          + row[34])
my\u path=r'c:\data\FF\Desktop\my\u files'
对于os.listdir(我的路径)中的文件:
path\u file=os.path.join(我的路径,文件)
将打开的(路径_文件,'r')作为输出:
reader=csv.reader(输出,分隔符=',')
read=[读卡器中的行对行,如果是行]
对于读取中的行:
如果len(世界其他地区)>24或len(世界其他地区)<34:
如果行[9]=“3080”:
打印(第[0]+'、'+第[24]+'、'+第[25]+'、'
+第[26]+'、'+第[27]+'、'+第[28]+'、'+第[29]行
+“,“+行[30]+”,“+行[31]+”,“+行[32]+”,“+行[33]+”,”
+第[34]行)
我收到以下错误:

  File "C:\data\FF\Desktop\Python\PythongMySQL\untitled2.py", line 15, in <module>
    if row[9] == '3080':

IndexError: list index out of range
文件“C:\data\FF\Desktop\Python\PythongMySQL\untitled2.py”,第15行,在
如果行[9]=“3080”:
索引器:列表索引超出范围

我希望得到几个长度介于24和34之间的行。

正如您所说,您希望长度介于24和34之间,因此您必须按如下方式更新该条件:

my\u path=r'c:\data\FF\Desktop\my\u files'
对于os.listdir(我的路径)中的文件:
path\u file=os.path.join(我的路径,文件)
将打开的(路径_文件,'r')作为输出:
reader=csv.reader(输出,分隔符=',')
read=[读卡器中的行对行,如果是行]
对于读取中的行:

如果len(row)>=24且len(row)这里有一个数据行长度在20-39之间变化的示例。只有长度介于24和34之间且列9==3080的行才会打印:

input.csv

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
0,1,2,3,4,5,6,7,8,3080,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38
test.py

导入csv
将open('input.csv','r',换行符='')作为f:
r=csv.reader(f)
对于r中的行:

如果24在检查长度时使用
而不是
。所有行都符合
@MarkTolonen我将
更改为和
收到以下错误:`+row[34])indexer:list index超出范围`需要长度为35行。@MarkTolonen仍然存在相同错误…如果24<34:
一旦确定行的长度小于34,您可以(可能)访问的最高索引是32。这仍然会提高indexerrors@E.Mancebo是的,仍然收到相同的错误。为什么没有打印出
34
38
行?0-34是长度35,0-38是长度39,在24-34长度之外。我觉得你没有很好地解释你的要求,如果这让你感到困惑的话。明白了。非常感谢。你能投票支持我的问题吗?