所以我看到这样做是在这里提出的其他问题,但我仍然有点困惑。我过去几天一直在学习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文件的第一行并找到一个特定的值,然后浏览整个列。提前谢谢!
答案 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文件。
一些注意事项:
snake_case
而不是camelCase
csv_filename
而不是i
,row
而不是column
等。)with
关闭处理文件(read more)享受!