Python 遍历字典,每次5行
我试图用csv.DictReader打开一个csv文件,只读取前5行数据,执行脚本的主要过程,然后读取接下来的5行,并对它们执行相同的操作。冲洗并重复 我相信我有一个有效的方法,但我对最后一行数据并没有进行处理有问题。我知道我需要修改if语句,以便它也检查我是否在文件的末尾,但我很难找到一种方法来做到这一点。我在网上找到了一些方法,但是它们涉及到读取整个文件以获得行数,但是这样做会破坏这个脚本的目的,因为我正在处理内存问题 以下是我到目前为止的情况:Python 遍历字典,每次5行,python,csv,Python,Csv,我试图用csv.DictReader打开一个csv文件,只读取前5行数据,执行脚本的主要过程,然后读取接下来的5行,并对它们执行相同的操作。冲洗并重复 我相信我有一个有效的方法,但我对最后一行数据并没有进行处理有问题。我知道我需要修改if语句,以便它也检查我是否在文件的末尾,但我很难找到一种方法来做到这一点。我在网上找到了一些方法,但是它们涉及到读取整个文件以获得行数,但是这样做会破坏这个脚本的目的,因为我正在处理内存问题 以下是我到目前为止的情况: import csv count = 0 d
import csv
count = 0
data = []
with open('test.csv') as file:
reader = csv.DictReader(file)
for row in reader:
count +=1
data.append(row)
if count % 5 == 0 or #something to check for the end of the file:
#do stuff
data = []
谢谢你的帮助 读取csv时,可以使用
chunksize
参数。这将逐步读取行数:
import pandas as pd
reader = pd.read_csv('test.csv', chunksize=5)
for df in reader:
# do stuff
您可以处理
for
循环体后面的剩余行。您还可以使用更具pythonic的枚举
import csv
data = []
with open('test.csv') as file:
reader = csv.DictReader(file)
for count, row in enumerate(reader, 1):
data.append(row)
if count % 5 == 0:
# do stuff
data = []
print('handling remaining lines at end of file')
print(data)
考虑到文件
a,b
1,1
2,2
3,3
4,4
5,5
6,6
7,7
输出
handling remaining lines at end of file
[OrderedDict([('a', '6'), ('b', '6')]), OrderedDict([('a', '7'), ('b', '7')])]
这是一种使用迭代器的方法 Ex:
import csv
with open('test.csv') as file:
reader = csv.DictReader(file)
value = True
while value:
data = []
for _ in range(5): # Get 5 rows
value = next(reader, False)
if value:
data.append(value)
print(data) #List of 5 elements
遵循您所写的内容,不包括任何其他导入内容:
import csv
data = []
with open('test.csv') as file:
reader = csv.DictReader(file)
for row in reader:
data.append(row)
if len(data) > 5:
del data[0]
if len(data) == 5:
# Do something with the 5 elements
print(data)
if语句允许在开始对数组进行处理之前加载5个元素
class ZeroItterNumberException(Exception):
pass
class ItterN:
def __init__(self, itterator, n):
if n<1:
raise ZeroItterNumberException("{} is not a valid number of rows.".format(n))
self.itterator = itterator
self.n = n
self.cache = []
def __iter__(self):
return self
def __next__(self):
self.cache.append(next(self.itterator))
if len(self.cache) < self.n:
return self.__next__()
if len(self.cache) > self.n:
del self.cache[0]
if len(self.cache) == 5:
return self.cache
class ZeroItterNumber异常(异常):
通过
第三类:
定义初始值(自身、提交人、n):
如果n self.n:
del self.cache[0]
如果len(self.cache)==5:
返回自缓存
如果您对reader:中的行使用,则无需检查是否已到达文件末尾。您有执行此检查的特定原因吗?这会在文件上生成一个“滚动窗口”,而不是OP想要实现的