我有一个文件目录,名为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-0
,10-0
,45-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也应该有值,但它们没有,我无法弄清楚我的代码中的确切问题。
答案 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)