Python通过CSV文件及其列循环

时间:2017-08-29 20:32:42

标签: python python-3.x csv

所以我看到这样做是在这里提出的其他问题,但我仍然有点困惑。我过去几天一直在学习python3,并且认为我开始在一个项目上工作以真正弄脏我的手。我需要遍历一定数量的CSV文件并对这些文件进行编辑。我在访问特定列时遇到了问题,而且在python中也存在循环问题。我习惯了惯例(int i = 0; i< expression; i ++),但是在python中它有点不同。到目前为止,这是我的代码,我将解释我的问题所在。

import os
import csv

pathName = os.getcwd()

numFiles = []
fileNames = os.listdir(pathName)
for fileNames in fileNames:
    if fileNames.endswith(".csv"):
        numFiles.append(fileNames)

for i in numFiles:
    file = open(os.path.join(pathName, i), "rU")
    reader = csv.reader(file, delimiter=',')
    for column in reader:
        print(column[4])

我的问题出在这一行:

for column in reader:
        print(column[4])

所以在文档中,它说列是变量,读者是我循环的。但是当我写4时,我得到了这个错误:

IndexError: list index out of range

这是什么意思?如果我写0而不是4,则打印出每个CSV文件的第0列单元格0中的所有值。我基本上需要它来浏览每个CSV文件的第一行并找到一个特定的值,然后浏览整个列。提前谢谢!

2 个答案:

答案 0 :(得分:6)

您的.csv文件中可能没有5列。

Python是base0,这意味着它从0开始计数,因此第一列是列[0],第二列是列[1]。

您也可以更改

for column in reader:

for row in reader:

因为读者遍历行,而不是我理解的列。

此代码循环遍历每一行,然后遍历该行中的每一列,允许您查看每个单元格的内容。

for i in numFiles:
    file = open(os.path.join(pathName, i), "rU")
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        for column in row:
            print(column)
            if column=="SPECIFIC VALUE":
                #do stuff

答案 1 :(得分:4)

欢迎使用Python!我建议你打印一些调试信息。

您可以将此添加到打印循环中:

for row in reader:
    try:
        print(row[4])
    except IndexError as ex:
        print("ERROR: %s in file %s doesn't contain 5 colums" % (row, i))

这将打印坏行(作为列表,因为它们是CSVReader中的表示方式),因此您可以修复CSV文件。

一些注意事项:

  1. 在Python中使用snake_case而不是camelCase
  2. 是很常见的
  3. 恰当地命名您的变量(csv_filename而不是irow而不是column等。)
  4. 使用with关闭处理文件(read more
  5. 享受!