我目前正在尝试运行我的 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
这目前有效,但是我无法添加其他正则表达式检查,例如字母、数字等
我尝试使用不同的正则表达式检查来复制 if 语句,但它不起作用。 我还尝试在 regex.py 文件中进行计数,但是计数停止于“1”并返回错误的信息。 我认为在 regex.py 文件中创建一个类会有帮助,但没有效果。
摘要: 我想对我的 csv 文件运行多个正则表达式检查,并通过列对它们进行排序。
提前致谢。
最佳答案
从上面的代码中,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))
现在您有一个名为“结果”的字典,其中包含按列名称存储的正则表达式检查的输出。然后您可以输出统计数据。或者,您可以在列表中读取行时保存行,一旦决定顺序,您可以返回并将行输出到新的 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)
诚然,这只是一个草图,但它应该可以帮助您继续前进。
关于python - 检查 CSV 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973355/