检查CSV中的正则表达式

时间:2014-04-09 20:31:54

标签: python regex csv

我目前正在尝试运行我的csv文件并识别列中的行。

输出应该类似于"此列仅包含字母字符"。

我的代码目前: 在我的方法中:

print('\nREGULAR EXPRESSIONS\n' +
              '----------------------------------')
        for x in range(0, self.tot_col):
            print('\n' + self.file_list[0][x] +
                  '\n--------------')  # Prints the column name

            for y in range(0, self.tot_rows + 1):

                if regex.re_alpha(self.file_list[y][x]) is True:
                    true_count += 1
                else:
                    false_count += 1

            if true_count > false_count:
                percentage = (true_count / self.tot_rows) * 100
                print(str(percentage) + '% chance that this column is alpha only')

            true_count = 0
            false_count = 0

self.file_list是列表格式的csv文件。 self.tot_rows& self.tot_col分别是先前在程序中计算的总行数和总列数。

regex.re_alpha已从文件导入,方法如下:

def re_alpha(column):
    # Checks alpha characters
    alpha_valid = alpha.match(column)
    if alpha_valid:
        return True
    else:
        return False

这当前有效,但是我无法添加其他正则表达式检查,例如alpha,numeric等

我尝试使用不同的正则表达式检查复制if语句,但它不起作用。 我还尝试在regex.py文件中进行计数,但计数在' 1'并返回错误的信息.. 我认为在regex.py文件中创建一个类会有所帮助但无济于事。

要点: 我想对我的csv文件运行多个正则表达式检查,并通过列进行排序。

提前致谢。

1 个答案:

答案 0 :(得分:1)

从上面的代码中,CSV的第一行包含列名。这意味着你可以创建一个字典来包含你的结果,其中键是列名。

from csv import DictReader

reader = DictReader(open(filename))  # filename is the name of the CSV file

results = {}

for row in reader:
    for col_name, value in row.items():
        results.setdefault(col_name, []).append(regex.re_alpha(value)) 

现在你有一个名为'results'的字典,其中包含由列名存储的正则表达式检查的输出。然后,您可以输出统计信息或者您可以在列表中读取行时保存行,一旦您决定订单,您可以返回并通过使用新订单中的键输出每个字典中的项目来将行输出到新的CSV文件。

csv_writer = csv.writer(open(output_filename, 'w'))

new_order = [list of key names in the right order]
for row in saved_data:
    new_row = map(row.get, new_order)
    csv_writer.writerow(new_row)

不可否认,这只是一个草图,但它应该让你去。