2016-04-28 5 views
0

Ich habe eine CSV-Datei wie folgt aus:die Verfolgung der gültigen Zeilen in CSV-Datei

1 2 3 4 5 6 
    4 5 6 3 # 2 
    2 4 5 6 3 1 
    3 4 % $ 2 1 
    1 2 3 4 5 8 

ich nur die Zeilen wollen, dass alle Zahlen haben, und keine anderen Zeichen. Gibt es eine Möglichkeit, nur die richtigen Zeilen zu verfolgen, die nur Zahlen enthalten?

Bisher habe ich dies nur haben:

import csv 
def get_rows(csv_file): 

    csv_read = open(csv_file) 
    reader = csv.reader(csv_read) 

    invalid_rows = 0 
    for row in reader: 

Ich bin nur nicht sicher, wie die Übersicht über die richtigen Zeilen zu halten, und in der Lage, die ungültigen Zeilen auf einen Zähler hinzuzufügen. Ich möchte die richtigen Zeilen in der Zukunft verwenden und einfach die Anzahl der falschen Zeilen zu einem Zähler hinzufügen.

Antwort

1

hier nicht arbeiten, ist eine reine Python-Lösung:

$ cat data 
1 2 3 4 5 6 
4 5 6 3 # 2 
2 4 5 6 3 1 
3 4 % $ 2 1 
1 2 3 4 5 8 
$ cat p.py 
import csv, re 

validRows=[] 
with open('data', 'r') as f: 
    reader=csv.reader(f, delimiter=' ') 
    for row in reader: 
     if all([re.match(r'^\d+$', item) is not None for item in row]): 
      validRows+=[row] 
print(validRows) 
$ python3 p.py 
[['1', '2', '3', '4', '5', '6'], ['1', '2', '3', '4', '5', '8']] 
$ 

Ohne Verwendung re:

import csv 

validRows=[] 
with open('data', 'r') as f: 
    reader=csv.reader(f, delimiter=' ') 
    for row in reader: 
     if all([item.isdigit() for item in row]): 
      validRows+=[row] 
print(validRows) 
+0

Gibt es eine andere Möglichkeit, dies zu tun? ohne die re-library zu benutzen? – RoadRunner

+1

@ Opticgenius bearbeitet die Antwort – ritesht93

3

Ich würde vorschlagen, Pandas, die sehr nützlich ist, wenn Sie mit Tabellendaten arbeiten. Artikel hier für die verwendeten Methoden Siehe: http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.select_dtypes.html

Hinweis: Dieser Code-Typen aus dem Speicher ist, so kann

import pandas as pd 

data_frame = pandas.read_csv(csv_file) 
data_frame.transpose() # we are interested in the rows, but pandas is primarily column oriented 
incorrect_cols = data_frame.select_dtypes(exclude=["number"]) 
number_cols = data_frame.select_dtypes(include=["number"]) 
number_cols.transpose() # now the old format again 
Verwandte Themen