Python循环遍历CSV文件及其列
Posted
技术标签:
【中文标题】Python循环遍历CSV文件及其列【英文标题】:Python Looping through CSV files and their columns 【发布时间】:2018-02-07 10:17:12 【问题描述】:所以我已经看到这里完成了其他问题,但我仍然有点困惑。过去几天我一直在学习 python3,我想我会开始做一个项目来真正弄脏我的手。我需要遍历一定数量的 CSV 文件并对这些文件进行编辑。通常,我无法转到特定列以及 python 中的循环。我习惯了约定(int i = 0; i
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])
所以在文档中它说 column 是变量,而 reader 是我正在循环的内容。但是当我写 4 我得到这个错误:
IndexError: list index out of range
这是什么意思?如果我写 0 而不是 4,它会打印出每个 CSV 文件的第 0 列单元格 0 中的所有值。我基本上需要它遍历每个 CSV 文件的第一行并找到一个特定的值,然后遍历整个列。提前致谢!
【问题讨论】:
这意味着在您的一个文件中的某处,没有任何第 5 列。for column in reader
?不是for row in reader
吗?并且不要忘记使用with
来确保文件在处理后关闭:with open(os.path.join(pathName, i), "rU") as file:
太棒了,感谢所有的答案! @azalea 为什么是 5?我试图了解 for 循环是如何工作的。
造成这种情况的一个常见原因是您的文件中某处有一个空行。例如第一行或最后一行。你可以添加类似if len(row) == 4:
不应该是for aFileName in fileNames:
而不是for fileNames in fileNames:
【参考方案1】:
可能是您的 .csv 文件中没有 5 列。
Python 是 base0,这意味着它从 0 开始计数,因此第一列为 column[0],第二列为 column[1]。
你也可能想改变你的
for column in reader:
到
for row in reader:
因为 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
【讨论】:
是的,我需要阅读更多文档。现在我明白发生了什么,谢谢!我真的很喜欢你和多伦科恩的回答。【参考方案2】:欢迎来到 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 文件。
一些注意事项:
-
在 Python 中通常使用
snake_case
而不是 camelCase
适当地命名您的变量(csv_filename
而不是 i
、row
而不是 column
等)
使用with
close 处理文件 (read more)
享受吧!
【讨论】:
是的!谢谢!我完全忘记了调试消息....我真傻。是的,我已经习惯了camelCase,但我会切换到snake_case。谢谢!我真的很喜欢你和 Philip556677 的回答。以上是关于Python循环遍历CSV文件及其列的主要内容,如果未能解决你的问题,请参考以下文章
Python 循环遍历 csv 文件中的 url 返回 \ufeffhttps://