Python通过CSV文件及其列循环

hum*_*der 7 python csv python-3.x

所以我看到这样做是在这里提出的其他问题,但我仍然有点困惑.我在过去的几天里一直在学习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])
Run Code Online (Sandbox Code Playgroud)

我的问题出在这一行:

for column in reader:
        print(column[4])
Run Code Online (Sandbox Code Playgroud)

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

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

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

Big*_*677 10

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

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

你也可以想改变你的想法

for column in reader:
Run Code Online (Sandbox Code Playgroud)

for row in reader:
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)


Dor*_*hen 5

欢迎使用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))
Run Code Online (Sandbox Code Playgroud)

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

一些注意事项:

  1. 通常snake_case在Python中使用而不是camelCase
  2. 适当命名变量(csv_filename而不是irow而不是column等)
  3. 使用withclose处理文件(了解更多信息

请享用!