对于第一个文件,我的字典显示如下:
[n1]
[x1,y1]
{n1:[x1,y1]}
对于第二个文件,我生成了必要的列表:
[name1,name2,name3]
[datax1,datay1,datalac1,datax2,datay2,datalac2,datax3,datay3,datalac3]
如何以这种形式将数据添加到字典中:
{n1:[x1,y1], name1:[datax1,datay1,datalac1], name2:[datax2,datay2,datalac2], name3:[datax3,datay3,datalac3]}
这是整个代码:
import re
#1 перечислить список команд, которые может выполнить программа:
repeat="y"
listcmd=['Заполненние новых БС Nokia (1)', 'Заполненние довесов БС Nokia (2)', 'Заполненние довесов БС Ericsson (3)']
listname=[]
listxy=[]
listallname=[]
listall=[]
#7 Создать словарь и собрать данные: key - ИМЯ БС, value - Координаты, TAC, BSC:
datasites = dict()
#2 Создать пустой файл, который будет очищать при первом запуске и дублировать в дальнейшем информацию из консоли программы:
with open("output.txt", "w") as outfile:
outfile.write("")
while repeat == "y":
print("Выполните действия, которые необходимо выполнить в CES:")
print(listcmd)
choicecmd = input()
#print(choicecmd)
if choicecmd == '1':
print("Добавьте файлы формата kml в папке где находится программа для дальнейшей обработки данных.")
#3 Вывести всю информацию одной БС из файла kml:
with open("Site_IR000478_1.kml","r", encoding="utf8") as rdbfile:
file = rdbfile.read()
#print(file)
#4 В двух файлах название БС, координаты, LAC и BSC отображаются в одном атрибуте Placemark. Нужно вывести всю информацию внутри атрибута Placemark:
Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
for i in Placemark:
#print(i)
#5 Написать код, который выводит Имя БС в каждом фрагменте Placemark, выводит его в нужном формате и добавить в пустой список:
listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
#print(listbs)
for bs in listbs:
if '/' in bs:
bs = bs.split('/')[0]
i1 = 2
i2 = 3
bs = bs[:i1] + bs[i2+1:]
listname.append(bs)
#print(bs)
with open("output.txt", "a") as outfile:
outfile.write(bs + "\n")
else:
#print("Имя базой станции другого формата!")
with open("output.txt", "a") as outfile:
outfile.write("Имя базой станции другого формата!\n")
#6 Написать код, который выводит координаты в каждом фрагменте Placemark и выводит его в нужном формате и добавить в пустой список:
listcoords = re.findall(r'<coordinates>(.*?)</coordinates>', i, re.DOTALL)
#print(listcoords)
for coords in listcoords:
#print(coords)
longitude = coords.split(',')[0]
latitude = coords.split(',')[1]
#print(longitude + " " + latitude + "\n")
with open("output.txt", "a") as outfile:
outfile.write(longitude + " " + latitude + "\n")
listxy.append(longitude)
listxy.append(latitude)
#print(listname)
#print(listxy)
#7
#datasites["test1"]="test2"
datasites[listname[0]]=listxy
print(datasites)
#8 Собрать данные для второго файла, в котором есть Bsc и Lac:
with open("IR.kml","r", encoding="utf8") as rdbfile:
file = rdbfile.read()
#print(file)
Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
for i in Placemark:
#print(i)
#if '<longitude>' and 'LAC' in i:
if ('<longitude>' in i) and ('LAC' in i) and ('BSC: ' in i):
listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
#print(listbs)
for bs in listbs:
if (len(bs)==6) == True:
#print(bs)
listallname.append(bs)
with open("output.txt", "a") as outfile:
outfile.write(bs + "\n")
else:
#print("Имя базой станции другого формата!")
with open("output.txt", "a") as outfile:
outfile.write("Имя базой станции другого формата!\n")
listcoords = re.findall(r'<longitude>(.*?)</latitude>', i, re.DOTALL)
#print(listcoords)
for coords in listcoords:
#print(coords)
coordinates = coords.split('</longitude>\n <latitude>')
#print(coordinates)
longitude = coordinates[0]
latitude = coordinates[1]
#print(longitude + " " + latitude + "\n")
with open("output.txt", "a") as outfile:
outfile.write(longitude + " " + latitude + "\n")
listall.append(longitude)
listall.append(latitude)
listbsctac = re.findall(r'<description>BSC: (.*?)</description>', i, re.DOTALL)
#print(listbsctac)
for data in listbsctac:
#print(data)
datas = data.split(' LAC: ')
#print(datas)
bsc = datas[0]
lac = datas[1]
#print(bsc + " " + lac + "\n")
with open("output.txt", "a") as outfile:
outfile.write(bsc + " " + lac + "\n")
listall.append(bsc)
listall.append(lac)
#9 Добавить в словарь данные загруженные из второго файла:
for o in listallname:
for p in listall:
datasites[o]=p
else:
#print("Координаты отсутсвуют!")
#with open("output.txt", "a") as outfile:
# outfile.write("Координаты отсутсвуют!\n")
break
#print(listallname)
#print(listall)
print(datasites)
elif choicecmd == '2':
print("Ты выбрал Заполненние довесов БС Nokia")
with open("output.txt", "a") as outfile:
outfile.write("Ты выбрал Заполненние довесов БС Nokia"+"\n")
elif choicecmd == '3':
print("Ты выбрал Заполненние довесов БС Ericsson")
with open("output.txt", "a") as outfile:
outfile.write("Ты выбрал Заполненние довесов БС Ericsson"+"\n")
repeat = input("Do you want to continue? (y/n): ")
if repeat == "n":
break
在第9点中我尝试实现这一点。但它不输出需要的内容。将来,我需要将密钥中的数据与后续密钥进行比较。即,将 n1 坐标 x1,y1 与 name1 - datax1,datay1 进行比较。
我不想深入研究代码,但在此任务中您可以使用以下内容:
这是我使用的输入(我必须将变量写为字符串,因为我没有任何变量):
这是用于转换的代码:
聚苯乙烯
如果列表是固定的并且只有变量的值发生变化,那么它是合适的。在名称数量不固定,但已知每个名称在列表中具有相同数量的元素(按此处排序)的情况下,可以使用更通用的代码: