跟踪csv文件中的有效行

时间:2016-04-28 06:06:59

标签: python csv

我有一个像这样的csv文件:

    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

我只想要包含所有数字的行,而不是任何其他字符。有没有办法只跟踪正确的行,其中只有数字。

到目前为止,我只有这个:

import csv
def get_rows(csv_file):

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

    invalid_rows = 0
    for row in reader:

我只是不确定如何跟踪正确的行,并且能够将无效行添加到计数器。我希望以后能够使用正确的行,只需将不正确的行数添加到计数器中。

2 个答案:

答案 0 :(得分:3)

我建议使用pandas,这在使用表格数据时非常强大。 有关使用的方法,请参阅此处的文章:http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.select_dtypes.html

注意:此代码是内存中的类型,因此可能无法正常工作

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

答案 1 :(得分:1)

这是一个纯粹的python解决方案:

$ 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']]
$

不使用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)