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)
欢迎使用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文件。
一些注意事项:
snake_case在Python中使用而不是camelCasecsv_filename而不是i,row而不是column等)withclose处理文件(了解更多信息)请享用!
| 归档时间: |
|
| 查看次数: |
38649 次 |
| 最近记录: |