Python通过CSV文件和它们的列循环
所以我已经看到这样做是其他问题在这里问,但我仍然有点困惑。过去几天我一直在学习python3,并认为我会开始一个项目的工作,以便让我的手变得肮脏。我需要遍历一定数量的CSV文件并对这些文件进行编辑。我在进入一个特定的列时也遇到了麻烦,并且一般情况下也出现了python中的循环。我习惯于约定(int i = 0;我<表达式; i ++),但在python中有点不同。这是我的代码到目前为止,我会解释我的问题在哪里。Python通过CSV文件和它们的列循环
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文件的第一行,找到一个特定的值,然后遍历整个列。提前致谢!
这可能是因为您的.csv文件中没有5列。
Python是base0,这意味着它开始从0开始计数,所以第一列将是列[0],第二列将是列[1]。你
可能还需要通过行,而不是列我的理解改变你
3210到
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
是的,我需要阅读更多的文档。现在我明白发生了什么,谢谢!我真的很喜欢你和Doron Cohen的回答。 – humbleCoder
欢迎来到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
接近处理文件(read more)
享受!
是的!谢谢!我完全忘了调试信息......我多么愚蠢。是的,我很习惯camelCase,但我会切换到snake_case。谢谢!我非常喜欢你和Philip556677的回答。 – humbleCoder
这意味着在您的某个文件的某处没有第5列。 –
'阅读器列'?这不是'在阅读器中排'吗?不要忘记使用'with'来确保文件在进程结束后关闭:'open(os.path.join(pathName,i),“rU”)作为文件:' – jferard
太棒了,感谢所有人答案! @azalea为什么是5?我试图理解这个for循环是如何工作的。 – humbleCoder