2017-08-19 110 views
-2

让我告诉你我的问题的详细信息...我有一个循环输出我的人的名字,如果它存在于我的数据库中被识别,否则它不会被识别,如果它得到承认一个FOR循环会输出我的名字,然后我想这个名字被存储在Excel表(即DATAFRAME)中,但它总是存储FOR循环在上一次迭代中给出的名称,以及它在先前输出的所有其他名称迭代将会丢失,这绝对是老毛病又犯了写作,并再次在这里是我的完整代码,请回答它专门python生成excel与熊猫

from scipy.spatial import distance 
import csv 
import dlib 
import os 
import numpy as np 
import cv2 
import pandas as pd 
from skimage import io 
import face_recognition 
from PIL import Image 
with open("Data/train.csv","r") as facefeatures2: 
    reader=csv.reader(facefeatures2) 
    featureslist2=[] 
    for row in reader: 
     if len(row) != 0: 
      featureslist2= featureslist2 +[row] 

facefeatures2.close() 
float_int2=[] 
results=[] 
for f2 in range(0,len(featureslist2)): 
    float_int2 = float_int2 +[[float(str) for str in subarray] for subarray in [featureslist2[f2]]] 
    csv2 = np.vstack(float_int2) 
faces_folder_path = "Data/newcropped" 
list = os.listdir(faces_folder_path) # dir is your directory path 
number_files = len(list) 
print (number_files) 

writer = pd.ExcelWriter('pandas_name11.xlsx', engine='xlsxwriter') 
for loop in range(0,number_files): 
    print("iteration ="+str(loop+1)) 
    unknown_image = face_recognition.load_image_file(faces_folder_path + "/" + str(loop+1)+".jpg") 
    cv2.imshow("test",unknown_image) 
    cv2.waitKey(0) 
    #### --------------exception handling-----------#### 
    try: 
     unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0] 

    except IndexError: 
     print("--->image is not detectable") 
     pass 
     # ...........................# 
    results = face_recognition.compare_faces(csv2, unknown_face_encoding) 
    chunks=[results[x:x + 12] for x in range(0, len(results),12)] # splits "results" list into sublists of size 12 
    dirpath = "Data/eachperson" 
    fname = [] 
    fname = [f for f in sorted(os.listdir(dirpath))] 
    counter = 0 
    index=0 
    for c in range (0,len(chunks)): 
     if 'True' in str(chunks[c]): 
      counter=counter+1 
      index=c 
      df = pd.DataFrame({'names': [fname[index]]}) 
      df.to_excel(writer, sheet_name='Sheet1') 
    if counter !=1 or counter ==0 : 
      print("student is not present :(") 
    else: 
     print(str(fname[index])+" is present!!!") 
writer.save() 
+1

[更新SQL输出数据到各自的片材使用python现有的Excel]的可能的复制(https://stackoverflow.com/questions/45674596/update-sql-output-data-into-existing-excel-在各自的表使用蟒蛇) – silvanoe

回答

0

与将解决你的问题的回答类似的问题,可以发现here

编辑:我会尝试扩展我的答案,但不能测试你的代码。

df = pd.DataFrame({'names': [fname[index]]}) 

覆盖每个循环中的数据帧。

df.to_excel(writer, sheet_name='Sheet1') 

将要写入Excel的数据框存储在表一中。在下一次迭代中,您将覆盖此信息。熊猫的to_excel()函数不附加。

您可以尝试先将所有名称存储在列表中,然后转换为数据帧,然后转换为__excel()。

names_present = [] 
for loop in range(0,number_files): 
    print("iteration ="+str(loop+1)) 
    unknown_image = face_recognition.load_image_file(faces_folder_path + "/" + str(loop+1)+".jpg") 
    cv2.imshow("test",unknown_image) 
    cv2.waitKey(0) 
    #### --------------exception handling-----------#### 
    try: 
     unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0] 

    except IndexError: 
     print("--->image is not detectable") 
     pass 
     # ...........................# 
    results = face_recognition.compare_faces(csv2, unknown_face_encoding) 
    chunks=[results[x:x + 12] for x in range(0, len(results),12)] # splits "results" list into sublists of size 12 
    dirpath = "Data/eachperson" 
    fname = [] 
    fname = [f for f in sorted(os.listdir(dirpath))] 
    counter = 0 
    index=0 
    for c in range (0,len(chunks)): 
     if 'True' in str(chunks[c]): 
      counter=counter+1 
      index=c 
    if counter !=1 or counter ==0 : 
      print("student is not present :(") 
    else: 
     print(str(fname[index])+" is present!!!") 
     # Store all names present in list 
     names_present.append(str(fname[index]) 
# Convert list to dataframe and safe 
writer = pd.ExcelWriter('pandas_name11.xlsx', engine='xlsxwriter') 
df = pd.DataFrame({'names': names_present}) 
df.to_excel(writer, sheet_name='Sheet1') 
writer.save() 
+0

没有兄弟它没有帮助我, –

+0

silvanoe请回答我现在编辑的版本谢谢 –