我正在使用从数据仓库(Cognos)获得的CSV文件进行数据分析。 CSV文件的最后一行汇总了上面的所有行,但是我不需要此行进行分析,因此我想跳过最后一行。
我正在考虑添加“if”语句,以检查“for”循环中的列名,如下所示。
import CSV
with open('COGNOS.csv', "rb") as f, open('New_COGNOS.csv', "wb") as w:
#Open 2 CSV files. One to read and the other to save.
CSV_raw = csv.reader(f)
CSV_new = csv.writer(w)
for row in CSV_raw:
item_num = row[3].split(" ")[0]
row.append(item_num)
if row[0] == "All Materials (By Collection)": break
CSV_new.writerow(row)
但是,这似乎浪费了很多资源。遍历CSV文件时,是否有任何pythonian方式可以跳过最后一行?
最佳答案
您可以编写一个生成器,该生成器将返回输入迭代器中除最后一个条目之外的所有内容:
def skip_last(iterator):
prev = next(iterator)
for item in iterator:
yield prev
prev = item
然后在其中包装
CSV_raw
阅读器对象:for row in skip_last(CSV_raw):
生成器基本上获取第一个条目,然后开始循环,并在每次迭代时产生前一个条目。输入迭代器完成后,仍然只剩下一行,该行永远不会返回。
让您跳过最后一个
n
元素的通用版本为:from collections import deque
from itertools import islice
def skip_last_n(iterator, n=1):
it = iter(iterator)
prev = deque(islice(it, n), n)
for item in it:
yield prev.popleft()
prev.append(item)
关于python - 在Python中进行迭代时跳过CSV文件的最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16846460/