1
votes

Comment supprimer les guillemets doubles triples autour des valeurs dans les fichiers csv?

J'ai un fichier csv. chaque valeur est entre guillemets "" ". Je souhaite la supprimer pour un traitement ultérieur

voici mon fichier csv

import psycopg2
import config as cfg
conn = cfg.DATABASE_CONNECT
cur = conn.cursor()
import csv
import pandas as pd
import numpy as np

tablename = "sf_paymentprofile_error_log"
query = "SELECT * from {} ".format(tablename)
outputquery = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(query)
with open(cfg.PG_EXTRACT_PATH+'sf_paymentprofile_error_log.csv', 'w') as f:
   cur.copy_expert(outputquery, data)


conn.commit()
conn.close()

Je veux la sortie comme:

Name,age,class,place
ishika,21,B,Whitefield
anju,23,C,ITPL

J'obtiens la table postgres du formulaire csv ..

Name,age,class,place
""""ishika""","""21""","""B"""","""Whitefield"""
"""anju""","""23""","""C""","""ITPL"""

Je veux la sortie ci-dessus en utilisant python .Merci.


4 commentaires

dans quelle structure de données vous chargez vos données? liste, dataframe?


je convertis ce csv en "liste"


Utilisez .replace ('"" "', '') pour supprimer " "" de la chaîne Comment utiliser string.replace () dans Python 3.x


faire remplacer j'obtiens l'erreur suivante. AttributeError: l'objet '_io.TextIOWrapper' n'a pas d'attribut 'replace'


3 Réponses :


0
votes

une façon de le faire en utilisant des pandas

output = []
for row in your_data :  
    b = []
    for val in row : 
        b.append(val.replace('"',''))
    c.append(b) 

print(output)

s'il s'agit d'une liste:

import pandas as pd

df = pd.read_csv("your_file.csv")


for i in df.columns :         
    df[i] = df[i].apply(lambda x: str(x).replace('"',''))

df.to_csv("output.csv",index=False)


2 commentaires

je reçois csv de la table postgres


il existe différentes manières de lire votre table avec pandas, df = pd.read_sql_query ('select * from "table"', con = engine), tout ce qui compte, c'est votre dataframe résultant sur lequel vous devrez faire le prétraitement



0
votes

Supprimez-les en les traitant comme des guillemets mais csv n'accepte qu'un séparateur à un caractère donc:

import re
with open('data.csv') as f:
    # replace """ to single "
    data = (re.sub(r'"+', '"', line) for line in f.readlines())
    # now treat it as normal csv
    rd = csv.reader(data, delimiter=',', quotechar='"')
    # print 
    for row in rd:
        print(','.join(row))

Ou si vous trouvez que c'est sûr, faites re .sub ('"', '', f.read ()) pour le fichier entier.


1 commentaires

@ishika c'est pareil, utilisez lines = csv_str.split ('\ n') . La chaîne de contenu csv peut être lue en exécutant la requête. Étant donné que vous utilisez postgres, vous devriez déjà connaître les opérations de base sur les fichiers et les chaînes.



0
votes

Les deux pd .str.replace et pd.str.strip aidera, par exemple:

import pandas as pd

df = pd.read_csv("my.csv", quotechar="'")
df = df.apply(lambda x: x.str.strip('"'))
print(df)

     Name age class       place
0  ishika  21     B  Whitefield
1    anju  23     C        ITPL

De toute façon, certaines des lignes de votre csv ont un " succession qui cache un séparateur , , donc si j'applique la fonction de décapage:

import pandas as pd

df = pd.read_csv("my.csv")
df = df.apply(lambda x: x.str.strip('"'))
print(df)

     Name age            class place
0  ishika  21  B"","Whitefield   NaN
1    anju  23                C  ITPL

La première solution de contournement que j'ai trouvée implique une modification du paramètre quotechar :

df.apply(lambda x: x.str.strip('"'))


0 commentaires