在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”。但可以看出,变量只是简单地连接起来。鉴于我无法更改输入文件的格式,如何完成插入“&”?


料青山看我应如是
浏览 122回答 2
2回答

梦里花落0921

干得好:expr =[]f = open('MCS_overlap.csv')expr.append(f.read())final_expr = expr[0].replace('\n', '|').replace(',', '&')print(final_expr)印刷:'x1|x3&x5|x2|x4&x6|x5&x7|x6&x8|x7&x9|x6&x8&x10'

犯罪嫌疑人X

因为您使用的是csvmodule,lines是一个列表,因此expr是一个元素全部为 x-es 和一些 pipeline 的列表|。您可以打印出来亲自查看。当您''.join(expr)这样做时,只是连接所有元素,没有逗号(即没有要替换的内容)。这应该做import csv# Reads Boolean expression from cutsets filewith 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)请注意,这两个片段均未经过测试,但我希望为您完成该任务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python