Dans cet exercice, nous allons créer un fichier csv qui contiendra deux colonnes. La première est relative au nom du fichier et la deuxième à son identifiant. Nous allons dans une première étape parcourir l'ensemble des fichiers dans un dossier et dans une seconde étape récupérer l'identifiant à partir du nom des fichiers parcouru.
Le programme python contient une seule fonction qui prend en entrée le chemin du dossier contenant le fichier et donne en sortie un fichier csv avec deux colonnes. Nous allons utilser les modules os, csv, re et les fonctions open() et write().
Nous importons d'abord les modules dont nous avons besoin.
In [1]:
import sys, os
import re
from os import listdir
from os.path import isfile, join
fromFileToCSV(folderpath, csvfilename)
In [4]:
def fromFileToCSV (folderpath,csvfilename) :
files = [f for f in listdir(folderpath) if isfile(join(folderpath, f))]
random.shuffle(files)
for filepath in files:
if filepath.endswith(".png"):
label = re.findall("^(\d+)_",filepath)
csvLine = filepath+","+str(label[0])
print csvLine
with open(folderpath+csvfilename, "a") as myfile:
myfile.write(csvLine)
myfile.write("\n")
files
est une liste qui le nom de tous les fichiers sous le chemin stocker dans la variable folderpath
. random.shuffle(files)
pour mélanger aléatoirement la position de chaque nom de fichiers dans la liste files
. files
avec un boucle for
et pour chaque fichier avec l'extention .png
nous récupérons dans la variable label
le premier caractére numérique qui est présent dans le nom du fichier filepath
. csvLine
avec le nom du fichier et le caractére numérique récupéré avec l'expression réculière "^(\d+)_"
.csvLine
.
In [ ]:
if __name__ == '__main__':
if len(sys.argv) == 3:
fromFileToCSV(sys.argv[1],sys.argv[2])
Dans cet exercice, nous allons construire un corpus ou une collection de documents à partir d'un fichier texte. Ce fichier contient plusieurs lignes qui correspondent à des tweets. D'abord, et après avoir ouvert le fichier, pour chaque ligne dans ce dernier nous allons créer un nouveau fichier. Cette étape nous donnera un dossier contenant un nombre de fichiers égal au nombre de ligne dans le fichier d'origine. Ensuite, et suivant une certaine proportion que nous allons fournir comme paramètre d'entrée nous allons diviser l'ensemble de fichiers en trois dossiers.
In [ ]:
import sys, os
import shutil
import re
import random
from os import listdir
from os.path import isfile, join
In [ ]:
def file_to_files (original_file_path):
if not os.path.exists("lines_folder"):
os.makedirs("lines_folder")
file_counter = 0
my_file = open(original_file_path)
for line in my_file.readlines():
file_counter += 1
my_new_file = open("lines_folder/"+str(file_counter)+'_processed_tweet.txt', 'a')
my_new_file.write(line)
my_new_file.close()
my_file.close()
return "lines_folder/"
In [ ]:
def from_folder_to_folders (original_folder_path, percentageFolder1, percentageFolder2, percentageFolder3):
"""
Shuffle the files in original_folder_path to have different files in each of the three folders
"""
files = [f for f in listdir(original_folder_path) if isfile(join(original_folder_path,f))]
random.shuffle(files)
nbFilesFolder1 = int((float(percentageFolder1)/100)*len(files))
nbFilesFolder2 = int((float(percentageFolder2)/100)*len(files))
nbFilesFolder3 = int((float(percentageFolder3)/100)*len(files))
if not os.path.exists(original_folder_path+"Folder1"):
os.makedirs(original_folder_path+"Folder1")
if not os.path.exists(original_folder_path+"Folder2"):
os.makedirs(original_folder_path+"Folder2")
if not os.path.exists(original_folder_path+"Folder3"):
os.makedirs(original_folder_path+"Folder3")
for j,filepath in enumerate(files):
sourceFolder = os.path.join(original_folder_path,filepath)
if (j > nbFilesFolder1 and j < nbFilesFolder1+nbFilesFolder2):
print "copying the files to folder 2"
if filepath.endswith(".txt"):
shutil.copy2(sourceFolder,original_folder_path+"Folder2/")
elif (j > nbFilesFolder1+nbFilesFolder2 and j < len(files)):
print "copying the files to folder 3"
if filepath.endswith(".txt"):
shutil.copy2(sourceFolder,original_folder_path+"Folder3/")
else:
print "copytin the files to folder 1"
if filepath.endswith(".txt"):
shutil.copy2(sourceFolder, original_folder_path+"Folder1/")
In [ ]:
def main():
from_folder_to_folders(file_to_files("data/preprocessedP.txt"), 50, 30, 20)
if __name__ == '__main__':
main()