我目前正在尝试运行我的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文件运行多个正则表达式检查,并通过列进行排序。
提前致谢。
答案 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)
不可否认,这只是一个草图,但它应该让你去。