python,找到csv某一列中和一个指定字符串前12位不同,后35位相同的,距离最近的其他字符串所对应的行号。
时间: 2023-05-19 21:01:49 浏览: 128
可以使用以下代码实现:
```python
import csv
import Levenshtein
def find_closest_row(csv_file, column_name, target_string):
closest_row = None
closest_distance = float('inf')
with open(csv_file, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
if column_name not in row:
continue
string = row[column_name]
if len(string) < 47 or string[:12] == target_string[:12]:
continue
distance = Levenshtein.distance(string[12:], target_string[12:])
if distance < closest_distance:
closest_row = row
closest_distance = distance
return closest_row
csv_file = 'data.csv'
column_name = 'some_column'
target_string = 'some_target_string'
closest_row = find_closest_row(csv_file, column_name, target_string)
if closest_row is not None:
print(f"Closest row: {closest_row}")
else:
print("No matching row found.")
```
其中,`csv_file` 是 CSV 文件的路径,`column_name` 是要查找的列名,`target_string` 是指定的字符串。函数 `find_closest_row` 会遍历 CSV 文件中的每一行,找到和 `target_string` 最接近的行,并返回该行的字典表示。如果没有找到匹配的行,则返回 `None`。
在函数中,我们使用了 Python 的 `csv` 模块来读取 CSV 文件,并使用了第三方库 `python-Levenshtein` 来计算字符串之间的编辑距离。我们首先判断每一行中是否存在指定的列,然后判断该列中的字符串是否符合要求(即前12位不同,后35位相同)。如果符合要求,则计算该字符串和目标字符串的编辑距离,并更新最接近的行和距离。最后返回最接近的行。
阅读全文