python - Skriv fil i en ny mappe baseret på brugerindgang

Indlæg af Hanne Mølgaard Plasc

Problem



Der er masser af forslag til, hvordan man opretter en mappe, men jeg kom ikke over elegante løsninger til at gemme en fil i en nyoprettet mappe. Koden gemmer filer i hovedmappen, ikke id-specifik. Jeg sætter stor pris på din hjælp. Tak!


Jeg bruger Windows 10 Python 3.


1) Kontroller, om 'TrainData/xx-xxx' -mappen findes


2) hvis den ikke findes:



  • Opret en undermappe i 'TrainData' -mappen og navngiv den ud fra enestående input (id) - dette virker nu

  • Gem filen i denne nye mappe (TrainData/xx-xxx) og navngiv den xx-xxx .... jpg



3) hvis den eksisterer:



  • Gem filen i denne nye mappe (TrainData/xx-xxx) og navngiv den xx-xxx .... jpg


    id = input('Client ID:xx-xxx')     
    
    directory = "TrainData/" +str(id)
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    #with open(os.path.join(directory, '.' +str(id))) #I can't get this to work
    
    file\_name\_path = directory + str(id)+ '.' +str(count)+ '.' +str(timegm(datetime.utcnow().utctimetuple())) + '.jpg' 
    
    if cv2.Laplacian(face, cv2.CV\_64F).var() >200:
        cv2.imwrite(file\_name\_path, face)
    
    else:
        count -= 1
    cv2.imshow('Client', frame)
    



}

Bedste reference


Dens for at oprette en mappe, hvis den ikke eksisterer:


import os

directory = "TrainData/" +str(id)
if not os.path.exists(directory):
       os.makedirs(directory)


Derefter kan du åbne og oprette en fil i den pågældende mappe.


with open(os.path.join(directory, '.' +str(count)+ '.' +str(timegm(datetime.utcnow().utctimetuple())) + '.jpg' ), "w") as ip\_file:
      ...

Andre referencer 1


Alt der manglede var en '+/'. Tak allesammen!


id = input('Client ID:xx-xxx') 

    directory = "TrainData/" +str(id) +'/'
    if not os.path.exists(directory):
       os.makedirs(directory)

    file\_name\_path = directory +"ID." +str(id)+ '.' +str(count)+ '.' +str(timegm(datetime.utcnow().utctimetuple())) + '.jpg'

    if cv2.Laplacian(face, cv2.CV\_64F).var() >200:
        cv2.imwrite(file\_name\_path, face)

    else:
        count -= 1

    cv2.imshow('Client', frame)