2016-11-04 68 views
2

我是python的新手,可以使用我可以獲得的任何幫助。我在一臺win7機器上,正在使用python 3.5(anaconda)遍歷多個CSV檢查每個文件中的整數值

我試圖遍歷文件夾中的多個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") 
+1

開始與一小部分的文件;獲得負載並檢查一個文件的運行狀況。然後只是迭代文件並收集數據。字典,也許'defaultdict'是開始收集的好地方。但只有幾個K文件,數據結構並不是什麼大問題。在這一點上,你的描述太模糊,不能提出更具體的建議。 – hpaulj

+0

感謝@hpaulj我很感激你的意見。 – StelioK

回答

1

這裏工作大熊貓的解決方案:

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 

UPDATE:

可以從文件名這樣分析的第一個數字:

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' 
+0

感謝@MaxU,這絕對是我可以使用的東西。美麗! – StelioK

+0

@StelioK,謝謝你接受答案:) – MaxU

+0

謝謝;唯一的問題是我有這樣的:文件名的形式是touchscreen_data_123456_1456789456_178.16.66.3,第三組字符串,即在這種情況下,「123456」,改變。這個集合可能有10k,而另一個可能是10k,那麼抓住每個唯一ID並將每個計數字段相加的最好方法是什麼?我想我可以導入到一個SQL表中,並在SQL中很容易做到這一點,但會很高興知道如何在Python中執行此操作 – StelioK

0

如果所有文件都在一個文件夾,你會使用類似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 

類似的東西...

+0

爲什麼選擇投票? – dawg

1

既然你問模塊和可能的使用。 你可能會考慮這樣的事情。 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.html https://docs.python.org/3.5/library/sqlite3.html 我傾向於在可能的情況下使用實際的SQL數據庫。