循环访问多个 CSV 检查每个文件中的整数值



我是python的新手,可以使用我可以得到的任何帮助。我在win7机器上使用python 3.5 (anaconda)

我试图在一个文件夹内迭代多个CSV文件(10k +),检查该文件中超过预定义阈值的任何值。

我想建立一个字典,或列表/元组(基本上任何最类似于sql表)使用文件名的子字符串作为一个名称字段的唯一标识符,并有另一列的总计数的文件的值超过给定的阈值。

我不期望你们中的任何一个人为我做这个,因为这是一个很好的练习,但我希望任何模块的建议,可能会使这个更容易。

我已经能够检查一个值的文件,但这只是大约10分钟进入这个任务,我不确定我如何通过多个文件迭代和构建表等。谢谢!

import numpy as np
path = 'C:\path' 
file = 'file.csv'
with open(path+file) as f:
    my_data = np.genfromtxt(path+file, delimiter = ",")
    for data in my_data:
        if -1 in my_data:
            print("it sure is")   

下面是可行的Pandas解决方案:

import glob
import os
import pandas as pd
all_files = glob.glob(r'd:/temp/csv/*.csv')
threshold = 100
data = []
for f in all_files:
    data.append([os.path.basename(f),
                (pd.read_csv(f, header=None) > threshold).sum().sum()])
df = pd.DataFrame(data, columns=['file','count'])
print(df)
# optionally save DataFrame to SQL table (`conn` - is a SQLAlchemy connection)
#df.to_sql('table_name', conn)
输出:

    file  count
0  1.csv      2
1  2.csv      3
测试数据:

1. csv:

1,2,3,400
10,111,45,67

2. csv:

1,200,300,4
10,222,45,67

更新:

你可以这样解析文件名中的第一个数字:

In [87]: import re
In [88]: f
Out[88]: '/path/to/touchscreen_data_123456_1456789456_178.16.66.3'
In [89]: re.sub(r'.*_D+_(d+)_d+.*', r'1', f)
Out[89]: '123456'

既然你问了模块和可能的用法。你可以考虑这样做。 import os import sqlite3 for root, dirs, files in os.walk(): //using os module if file == somethingyouwanttoparse: //ie *.csv with open as f: if line data == IWantToSaveThis: insert data into sqlite table //using sqlite3 module
https://docs.python.org/3/library/os.htmlhttps://docs.python.org/3.5/library/sqlite3.html我倾向于在可能的情况下使用实际的SQL数据库

如果所有文件都在一个文件夹中,则可以使用类似glob的东西来遍历所有文件。然后使用csv测试是否存在:

found=[]
for fn in glob.glob('c:\path\*.csv'):
    with open(fn) as f:
        for row in csv.reader(f):
             if tgt_value_as_string in row:
                  found.append(fn)
                  break

相关内容

  • 没有找到相关文章

最新更新