python文件处理-根据csv文件内容,将对应图像拷贝到指定文件夹

内容涉及:文件遍历,读取csv指定列,拷贝文件,清理和创建文件

# -*- coding: utf-8 -*-
import csv
import os
import sys
import numpy as np
import copy
import shutil
import pandas as pd
from collections import Counter
from shutil import copyfile

'''
原数据目录如下:
./2019-6-14/
├── 1816740
│   ├── IMG005x020.csv
│   ├── IMG027x033.JPG
│   ├── IMG029x023.csv
│   └── IMG029x023.JPG
        ... ...
├── 1816765
│   └── ... ...
├── 1816875
│   └── ... ...
├── 1816896
│   └── ... ...
├── 1816900
│   └── ... ...
└── 1816969
    └── ... ...
    ...
分类脚本与/2019-6-14/在同级目录
'''

data = '2019-6-23'
path = os.getcwd()
path_1 = path + '/' + data
data_N_root = path + '/' + 'data_N' + '_' + data
data_P_root = path + '/' + 'data_P' + '_' + data
if os.path.exists(data_N_root):
    shutil.rmtree(data_N_root+'/')
os.mkdir(data_N_root)
if os.path.exists(data_P_root):
    shutil.rmtree(data_P_root+'/')
os.mkdir(data_P_root)
print("清理文件夹")
print(data_N_root)
print(data_P_root)
list_name = os.listdir(path_1)
lossfile = []
count1 = 0
count2 = 0
for n in list_name:
    path_2 = path_1 + '/' + n
    list_name_1 = os.listdir(path_2)
    for m in list_name_1:
        temp = copy.copy(m[-3:])
        temp_1 = copy.copy(m[:-3])
        csv_root = path_1 + '/' + n + '/' + m
            
        if temp == 'csv':
            if not os.path.exists(csv_root[:-3] + 'JPG'):
                lossfile.append(csv_root)
                continue
            with open(csv_root,'rwb') as csvfile:
                reader = csv.reader(csvfile)
                column1 = [row[0]for row in reader]
                column1 = column1[1:]
                #print("len",len(column1))
                column2 = str(np.ones((len(column1),1)))
                print(column1)
                print(column2)
                print(csv_root)
                writer = csv.writer(csvfile)
                for val in column2:
                    writer.writerow('type',val)
                print("cell type :", column1)
                sign = 0
                for k in column1:
                    if k == '1' or k == '5':
                        continue
                    else:
                        sign = 1
                print("sign :", sign)
                if sign == 1:
                    print("该FOV为阳性")
                    copyfile(csv_root[:-3] + 'csv',data_P_root + '/' + temp_1 + 'csv')
                    copyfile(csv_root[:-3] + 'JPG',data_P_root + '/' + temp_1 + 'JPG')
                    count1 = count1 + 1
                else:
                    print("该FOV为阴性")
                    copyfile(csv_root[:-3] + 'csv',data_N_root + '/' + temp_1 + 'csv')
                    copyfile(csv_root[:-3] + 'JPG',data_N_root + '/' + temp_1 + 'JPG')
                    count2 = count2 + 1

print("===============================")
if len(lossfile) == 0:
    print("data classify OK")
else:
    print("loss file :")
    for n in lossfile:
        print(n)
print("阳性FOV数量:",count1)
print("阴性FOV数量:",count2)
原文地址:https://www.cnblogs.com/niulang/p/11351467.html