1
votes

Comment diviser les données dans une colonne et stocker les valeurs dans une nouvelle colonne dans les fonctionnalités du module csv python3.x

J'essaie de diviser les données existantes dans une colonne et de les stocker dans une nouvelle colonne

import csv
print(dir(csv))
filename = "H:\\FairDealCustomerData.csv"
csvout = "H:\\FairDealCustomerDataOUT.csv"
with open(filename,"r",newline='') as file:
     file = ''.join([i for i in file]).replace("Mr.", "")
     file = ''.join([i for i in file]).replace("Miss.", "")
     file = ''.join([i for i in file]).replace("Mrs.", "")
with open(csvout,"w",newline='') as outfile:
     outfile.writelines(file)
     outfile.close()

Inputdata.csv
Braund, Mr. Owen Harris ,1
Heikkinen, Miss. Laina ,0
Allen, Mr. William Henry ,0
 Expecting_output.csv
Braund,Owen Harris ,1,Mr
Heikkinen,Laina ,0,Miss
Allen,William Henry ,0,Mr

J'ai essayé et j'ai obtenu la fonctionnalité Rechercher et remplacer, mais je ne parviens pas à coder la recherche et le stocker dans une nouvelle colonne

**Inputdata.csv**
Braund, Mr. Owen Harris ,1
Heikkinen, Miss. Laina ,0
Allen, Mr. William Henry ,0
**Expecting_output.csv**
Braund,Owen Harris ,1,Mr
Heikkinen,Laina ,0,Miss
Allen,William Henry ,0,Mr


0 commentaires

3 Réponses :


0
votes

Utilisation d'expressions régulières pour extraire les différents groupes et les réorganiser comme vous le souhaitez.

Braund,Owen Harris ,1,Mr.
Heikkinen,Laina ,0,Miss.
Allen,William Henry ,0,Mr.

Résultat:

import re
new_lines = []
with open('inputdata.txt', 'r') as file:
    for line in file:
        regex = re.compile(r'(\w+),\s?(Mr.|Miss.|Mrs.)\s(\w+\s?\w*\s),([01])')
        new_line = regex.findall(line)[0]
        print(f"{new_line[0]},{new_line[2]},{new_line[3]},{new_line[1]}")


0 commentaires

1
votes

Essayez ceci, même résultat que vous attendez.

import csv

filename = "H:\\FairDealCustomerData.csv"
csvout = "H:\\FairDealCustomerDataOUT.csv"

with open(filename, 'r', newline='') as read_file:
    readCSV = csv.reader(read_file, delimiter=',')
    with open(csvout, 'w', newline='') as write_file:
        writer = csv.writer(write_file)
        for row in readCSV:
            writer.writerow([row[0], row[1].split('.')[1].strip() + ' ', row[2], row[1].split('.')[0].strip()])


0 commentaires

0
votes

Hourra, je l'ai compris grâce à @Kushan Gunasekera

import csv
filename = "F:\\FairDealCustomerData.csv"
csvout = "F:\\FairDealCustomerDataout.csv"
with open(filename,'r',newline='') as read_file:
    readCSV = csv.reader(read_file, delimiter=',')
    with open(csvout,"w",newline='') as write_file:
        writer = csv.writer(write_file)
        for row in readCSV:
            writer.writerow([row[0], row[1].split('.')[1].strip() + ' ', row[2], 
            row[1].split('.')[0].strip()])
write_file.close()

ALERT:please do care about with and for functionalities other wise we will get 
 ValueError: I/O operation on closed file


1 commentaires

il est le bienvenu @prasanthG, et un autre que vous n'avez pas besoin de fermer lorsque vous ouvrez avec des instructions with . Veuillez vérifier ces questions, La fermeture explicite des fichiers est-elle importante? , La fermeture est-elle nécessaire lors de l'utilisation d'itérateur sur un objet fichier Python et Pourquoi devrais-je fermer des fichiers en Python? . Got it bro? Vous n'avez donc pas besoin de le fermer.