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.
3 Réponses :
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)
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
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.
@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.
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('"'))
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.xfaire remplacer j'obtiens l'erreur suivante. AttributeError: l'objet '_io.TextIOWrapper' n'a pas d'attribut 'replace'