通过unix验证csv文件中所有列的数据类型

时间:2016-11-07 15:40:27

标签: unix

我有像这样的CSV文件

dsdgh|234|@jhsjdh||jdhjdhfu|123|
#45ghf|123|laiej|||b8#hfj|
|hyrhyf|123||fhyr|@#$%|

等等。

列数可以等于100.此外,上面的文件是管道分隔的。

我想检查每列的数据类型,即列是数字还是字母或字母数字

并希望将结果重定向到txt文件

请帮助我,实现这个目标

谢谢

1 个答案:

答案 0 :(得分:0)

假设在每一行中列数相同,您可以使用此脚本:

import re
import sys

input_file = open(sys.argv[1])

cols = None

for line in input_file.readlines():
    fields = line.split('|')

    if not cols:
        cols = map(lambda _: 'empty', fields)

    for i, field in enumerate(fields):
        if field == '':
            continue

        if re.match(r'^[0-9]+$', field):
            if cols[i] == 'empty':
                cols[i] = 'numeric'
            elif cols[i] == 'alphabetic':
                cols[i] = 'alphanumeric'
        elif re.match(r'^[^0-9]+$', field):
            if cols[i] == 'empty':
                cols[i] = 'alphabetic'
            if cols[i] == 'numeric':
                cols[i] = 'alphanumeric'
        else:
            cols[i] = 'alphanumeric'

print '|'.join(cols)

只需将其保存到文件(在此示例中为script.py),然后运行:

$ python script.py <path_to_file_with_columns>