这本词典正在被随机添加和印刷

2024-10-02 20:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,在我问之前,我已经看到了以下答案:

Python OrderedDict not keeping element order

Converting dict to OrderedDict

OrderedDict does not preserve the order

但我还是无法纠正

背景:我有一个groundtruth文件,比如jp1\u GT.txt(也有其他文件,在不同的路径上,但目前我只关心一个文件)在某些路径上。在该文件中,每行表示格式中的一个边界框。我正在用一些计算来改变这个问题,并打算把它们写在一个新的groundtruth文件中

#Path containing old folders
src_path = r"C:\Users\username\Downloads\LITIV_dataset"

#dictionary creation
newgtdict ={}

for folderName in os.listdir(src_path):
  folderPath = src_path + "\\" + folderName

  if not os.path.isdir(folderPath):
    continue

  listOfFilePaths = glob.glob(folderPath + "\\"+ folderName +"_GT.txt")
  for filePath in listOfFilePaths:

    openedFile = open(filePath, 'r')
    lines = openedFile.readlines()
    linecount =0

    for line in lines:
        linecount+=1
        linenumber = str(linecount)
        my_list = str(line).split(",")
        bboxes=[]

        #checking for non-empty lines
        if len(my_list)>0:
            x_br = int(my_list[2])
            y_br = int(my_list[3])
            x_tl = int(my_list[0]) - (x_br/2)
            y_tl = int(my_list[1]) - (y_br/2)
            box = [x_tl,y_tl,x_br,y_br]
        newgtdict[str(filePath)+str(linenumber)] = box 
        print newgtdict

我的jp1\u GT.txt的前四行如下所示:

189,163,72,72
190,162,72,72
188,160,72,72
189,163,72,72

但是,输出的前四行如下所示:

{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt1': [153, 127, 72, 72]} 
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt1': [153, 127, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt2': [154, 126, 72, 72]} 
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt1': [153, 127, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt3': [152, 124, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt2': [154, 126, 72, 72]}
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt4': [153, 127, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt1': [153, 127, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt3': [152, 124, 72, 72], 'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt2': [154, 126, 72, 72]}

预期的前4行输出:

{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt1': [153, 127, 72, 72]} 
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt2': [154, 126, 72, 72]} 
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt3': [152, 124, 72, 72]} 
{'C:\\Users\\username\\Downloads\\LITIV_dataset\\jp1\\jp1_GT.txt4': [153, 127, 72, 72]} 

只是一个附带的问题:你有没有其他更好的办法


Tags: 文件pathbrgtformydownloadsusername
1条回答
网友
1楼 · 发布于 2024-10-02 20:30:04

您在每次迭代时打印字典,而不是在每次迭代时将新项打印到字典

你可以这样做:

for line in lines:
    # <snip>
    newgtdict[str(filePath)+str(linenumber)] = box 
    print box

或者

for line in lines:
    # <snip>
    newgtdict[str(filePath)+str(linenumber)] = box 
    # don't print here

for line in newgtdict:
    print(line)

请注意,您没有使用OrderedDict,您应该这样做(如果您希望在早于3.7的Python版本中获得有序结果)

newgtdict = collections.OrderedDict()
# rather than = {}

相关问题 更多 >