首页 > 解决方案 > 在 Python 中将 csv 文件解析为布尔表达式

问题描述

我有一个 csv 文件,例如:

cutsets
x1
x3,x5
x2
x4,x6
x5,x7
x6,x8
x7,x9
x6,x8,x10

我运行以下 Py 脚本:

import csv
# Reads Boolean expression from cutsets file
expr = []
with open("MCS_overlap.csv", "r") as csv_file:
    csv_reader = csv.reader(csv_file)
    # skip the first row
    next(csv_reader)
    for lines in csv_reader:
        expr = expr + lines + ['|']
    del expr[-1]
    final_expr=str(''.join(expr)).replace(",","&")
print("The Boolean expression is")
print(final_expr)

并获得输出:

The Boolean expression is
x1|x3x5|x2|x4x6|x5x7|x6x8|x7x9|x6x8x10

我希望在用final_expr=str(''.join(expr)).replace(",","&")“|”括起来的任何两个变量之间得到一个“&”,例如“x4&x6”、“x6&x8&x10”。但可以看出,变量只是简单地连接起来。鉴于我无法更改输入文件的格式,如何完成插入“&”?

谢谢桂

标签: pythoncsv

解决方案


因为您使用的是csv模块,lines所以是一个列表,因此expr是一个列表,其中的元素都是 x-es 和一些管道|。您可以打印自己查看。当你这样做时''.join(expr),它只是连接所有元素,没有逗号(即没有什么可替换的)。

这应该做

import csv
# Reads Boolean expression from cutsets file

with open("MCS_overlap.csv", "r") as csv_file:
    csv_reader = csv.reader(csv_file)
    # skip the first row
    next(csv_reader)
    lines = ('&'.join(line) for line in csv_reader)
    final_expr = '|'.join(lines)
print(final_expr)

当然,你可以不用csv模块

with open("MCS_overlap.csv", "r") as csv_file:
    next(csv_file)
    lines = (line.strip().replace(',', "&") for line in csv_file)
    final_expr = '|'.join(lines)
print(final_expr)

请注意,这两个片段都没有经过测试,但我希望为您完成任务。


推荐阅读