【问题标题】:How to remove triple double-quotes around values in csv files?如何删除csv文件中值周围的三重双引号?
【发布时间】:2019-05-07 10:02:01
【问题描述】:

我有一个 csv 文件。每个值都用 """ 引号引用。我想删除它以进行进一步处理

这是我的 csv 文件

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

我希望输出为:

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

我正在获取 csv 表单 postgres 表..

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()

我想要使用 python 的上述输出。谢谢。

【问题讨论】:

  • 您在什么数据结构中加载数据?列表,数据框?
  • 我正在将此 csv 转换为“列表”
  • 使用<string>.replace('"""', '')从字符串How to use string.replace() in python 3.x中删除"""
  • 进行替换时出现以下错误。 AttributeError: '_io.TextIOWrapper' 对象没有属性 'replace'

标签: python sql pandas postgresql


【解决方案1】:

一种使用熊猫的方法

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)

如果是列表:

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

print(output)

【讨论】:

  • 我正在从 postgres 表中获取 csv
  • 使用 pandas 读取表格的方法有多种, df = pd.read_sql_query('select * from "table"',con=engine) ,重要的是您将拥有的结果数据框进行预处理
【解决方案2】:

通过将它们视为引号来删除它们,但 csv 只接受一个字符分隔符,因此:

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))

或者,如果您认为它是安全的,请为整个文件执行 re.sub('"', '', f.read())

【讨论】:

  • @ishika 一样,使用lines = csv_str.split('\n')。可以通过执行查询来读取 csv 内容字符串。考虑到您使用的是 postgres,您应该已经知道基本的文件和字符串操作。
【解决方案3】:

pd.str.replacepd.str.strip 都会有所帮助,例如:

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

无论如何,你的 csv 的某些行有一个 " 继承,隐藏一些 , 分隔符,所以如果我应用 strip 函数:

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

我发现的第一个解决方法意味着更改 quotechar 参数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2022-01-20
    • 2018-07-27
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多