为什么我只在词典的第一个键中获得值?

时间:2018-03-27 09:02:39

标签: python python-3.x list dictionary

我有一个文件目录,名为45-1.txt 1-17.txt等。基本上它们是2个数字,分别用' - '和.txt结尾。我有一个看起来像这样但有数千行的数据集:

value/test/10/blueprint-0.png,2089.0,545.0,2100.0,546.0
value/test/10/blueprint-0.png,2112.0,545.0,2136.0,554.0
value/test/45/blueprint-1.png,112.0,45.0,36.0,654.0

我在这些行中关注的值是每行的前2个数字,因此10-010-045-1等。我想要做的是复制具有2个数字的行让我们说10-0作为前面文件中1个名称的一部分,在这个示例中应该复制45-1

我的代码:

import os,csv,re

my_dict = {}
source_dir = '/home/ubuntu/Desktop/EAST/testing_txts/'

for element in os.listdir(source_dir):
    my_dict[element] = []
# print(my_dict)

with open('/home/ubuntu/Desktop/EAST/ground_truth.txt') as f:
  reader = csv.reader(f)
  for key in my_dict:
      for filename in reader:
          print(filename)
          k = []
          k.append(re.findall(r'\d+', str(filename)))
          k1,k2 = k[0][0],k[0][1]
          k3,k4 = re.findall(r'\d+', key)
          if k3 == k1 and k2 == k4:
              my_dict[key].append(filename)

print(my_dict)

输出示例:

{'44-9.txt': [['value/test/44/blueprint-9.png', '1303.0', '201.0', '1348.0', '212.0'], ['value/test/44/blueprint-9.png', '1352.0', '202.0', '1399.0', '210.0']],'1-0.txt' : [], '5-6.txt' : []}

现在44-9中的数据总是充满且足够但例如1-0和5-6也应该有值,但它们没有,我无法弄清楚我的代码中的确切问题。

2 个答案:

答案 0 :(得分:0)

reader是一个迭代器,而不是列表/字典。这意味着您只需翻过一次即可 如果您想对读者进行多次迭代,则需要将值保留在内存中。最简单的方法是:

with open('/home/ubuntu/Desktop/EAST/ground_truth.txt') as f:
    reader = list(csv.reader(f))

然后您可以立即关闭文件(在循环之前)。

答案 1 :(得分:0)

您正在以错误的方式使用csv.reader。将您的代码更改为此

import os,csv,re

my_dict = {}
source_dir = '/home/ubuntu/Desktop/EAST/testing_txts/'

for element in os.listdir(source_dir):
    my_dict[element] = []    

input_file = open('/home/ubuntu/Desktop/EAST/ground_truth.txt')
input_file_reader = csv.reader(input_file)

for row in input_file_reader:
    for key in my_dict:
        for filename in row:
            print(filename)
            k = []
            k.append(re.findall(r'\d+', str(filename)))
            k1,k2 = k[0][0],k[0][1]
            k3,k4 = re.findall(r'\d+', key)
            if k3 == k1 and k2 == k4:
                my_dict[key].append(filename)

print(my_dict)