python - 如何在Python中处理大的csv文件?

标签 python function csv

我有包含 40k 行数据的 CSV 文件。

我的每个函数都会打开 csv 文件并使用它,然后关闭它。 有没有一种方法可以让我打开该文件一次然后关闭它,然后我可以随时使用它?我尝试将每个字段放在一个单独的列表中,并在调用它或在字典中时使用它,但这两种方法都可以在最多 1k 行时正常工作,如果更多则需要很长时间来处理它,我找到了一种通过过滤来加速的方法他们,但不知道如何应用它。

我的代码示例。

files=open("myfile.csv","r")


def spec_total():
    total = 0.0
    files.readline() # skip first row
    for line in files:
        field=line.strip().split(",")  #make Into fields
        tall=float(field[0])      
            if tall >= 9.956:
        total +=tall
    print("The sum is: %0.5f" % (total))

spec_total()
files.close()

其他功能

files=open("3124749c.csv","r")
def code():
    match= 0
    files.readline() # skip first row
    for row in files:
        field=row.strip().split(",") #make Into fields
        code=(field[4])
        import re
        if re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', code) is None:
            match += 1
    print("The answer that do not match code is :",match)

code()

files.close()

还有更多函数可以在每次打开 csv 文件时将其拆分为字段,以便识别我指的是哪个字段。

最佳答案

如果我理解正确,请尝试:

import csv
total = 0.0
for row in csv.reader(open("myfile.csv")):
    tall = float(row[0])
    if tall >= 9.956:
        total += tall

print("The sum is: %0.5f" % total)
<小时/>

更复杂的版本 - 创建计算类来处理每一行。

class Calc(object):
    def process(self,row):
       pass
    def value(self):
        pass

class SumColumn(Calc):
    def __init__(self, column=0,tall=9.956):
        self.column = column
        self.total = 0

    def process(self, row):
        tall = float(row[0])
        if tall >= self.tall:
           self.total += tall

    def value(self):
        return self.total

class ColumnAdder(Calc):
    def __init__(self, col1, col2):
        self.total = 0
        self.col1 = col1
        self.col2 = col2

    def process(self, row):
        self.total += (row[self.col1] + row[self.col2])

    def value(self):
        return self.total

class ColumnMatcher(Calc):
   def __init__(self, col=4):
      self.matches = 0

   def process(self, row):
      code = row[4]
     import re
     if re.search(r'\[[A-Za-z][0-9]+\][0-9]+[A-Za-z]{2}[0-9]+#[0-9]+', code) is None:
         self.match += 1

   def value(self):
      return self.matches

import csv
col0_sum = SumColumn()
col3_sum = SumColumn(3, 2.45)
col5_6_add = ColumnAdder(5,6)
col4_matches = ColumnMatcher()

for row in csv.reader(open("myfile.csv")):
    col0_sum.process(row)
    col3_sum.process(row)
    col5_6_add.process(row)
    col4_matches.process(row)

print col0_sum.value()
print col3_sum.value()
print col5_6_add.value()
print col4_matches.value()
<小时/>

这段代码被输入到 SO 中,这是一件乏味的事情 - 几乎没有语法等。

仅用于说明目的 - 不要过于字面意思。

关于python - 如何在Python中处理大的csv文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793027/

相关文章:

python - 将数据帧系列中的分数转换为 float

python - 永远防止启动重复进程

javascript - 点击 jQuery 不工作 FireFox - 可能是 event.preventdefault

java - 如何随机选择一个类的实例并执行它的方法?

python - 在 CSV 文件 PYTHON 的列中查找最大值

python - 如何使用 __getattr__ 使类(class)可挑选

python - 具有动态网格布局的 Kivy 模板

javascript - 函数和对象 Javascript

javascript - 将数据值添加到中间或上方的 D3.js 条形图

c++ - 使用 C++ 读取带有两个连续分隔符的 csv 文件