我有一个包含这些数据的csv文件:
Sensor 1;;
x;o;o
o;x;x
x;x;o
Sensor 2;;
o;x;o
x;x;o
o;o;o
Sensor 3;;
x;o;x
x;x;o
x;x;x
程序应该做的是询问您想要哪个传感器,并返回传感器名称,并以字典中的数组形式显示路径。一个示例如下:
Sensor 1 : press 1
Sensor 2 : press 2
Sensor 3 : press 3
{Sensor 1: [[x,o,o],[o,x,x],[x,x,o]]}
这是我试过的代码:
f=open('file.csv','r')
dic={}
key=""
s=f.readlines()
for line in s:
row=line.split(';')
if "Sensor" not in line:
if key:
dic[key].append(row)
else:
key=row[0]
dic[key]=[]
print(dic)
代码不能有导入
您可以尝试解析字符串以获得所需的输出
data = open('temp.csv').readlines()
current_sensor = None
sensor_dict = {}
for each_line in data:
if each_line.startswith('Sensor'):
sensor_name = each_line.replace(';', '').replace('n', '')
current_sensor = sensor_name
sensor_dict[current_sensor] = []
else:
sensor_dict[current_sensor].append(each_line.replace('n', '').split(';'))
# print(sensor_dict)
print("""Sensor 1 : press 1
Sensor 2 : press 2
Sensor 3 : press 3
""")
user_input = 'Sensor ' + input('Which sensor you want (1,2,3): ')
print(sensor_dict[user_input])
Sensor 1 : press 1
Sensor 2 : press 2
Sensor 3 : press 3
Which sensor you want (1,2,3): 1
[['x', 'o', 'o'], ['o', 'x', 'x'], ['x', 'x', 'o']]
问题是您已将dic
定义为列表[]
,但它应该是字典dict()
。
除此之外,您可能还希望使用rstrip()
来修剪n
字符并分隔行以获得列表。目前,您正在将每一行str
对象附加到每个传感器的列表中。
f=open('file.csv','r')
dic=dict() # this is a dictionary
s=f.readlines()
key = ""
for line in s:
if "Sensor" not in line:
if key:
line = line.rstrip()
line = line.split(';')
dic[key].append(line)
else:
row = line.split(';')
key=row[0]
dic[key]=[]
print(dic['Sensor 1'])
根据注释编辑。
如果您需要更多的索引级别,您可以修改生成的列表,添加一个带有传感器编号的新键。
f=open('file.csv','r')
dic=dict()
s=f.readlines()
key = ""
for line in s:
if "Sensor" not in line:
if key:
line = line.rstrip()
line = line.split(';')
dic[key].append(line)
else:
row = line.split(';')
key=row[0]
dic[key]=[]
sensor_dict = dict()
for k, v in dic.items():
sensor_dict[k.split()[-1]] = {k: v}
user_input = input('Which sensor you want (1,2,3): ')
print(sensor_dict[user_input])
输出:
Which sensor you want (1,2,3): 3
{'Sensor 3': [['x', 'o', 'x'], ['x', 'x', 'o'], ['x', 'x', 'x']]}