代码之家  ›  专栏  ›  技术社区  ›  Pangu

替换CSV文件中特定列项目的双引号?

  •  0
  • Pangu  · 技术社区  · 4 年前

    我有一个巨大的CSV文件,其中包含如下示例数据:

    "Name";"Current balance";"Account";"Transfers";"Description";"Payee";"Category";"Date";"Memo";"Amount";"Currency";"Check #";"Tags"
    "Capital One Quicksilver";"-119.99";"USD";"";"";"";"";";"";"";";"";""
    "";"";"Capital One Quicksilver";"";"DMV";""Carfax";"";"08/19/2004";"";"-24.99";"USD";"";""
    "";"";"Capital One Quicksilver";"";"DMV";""Carfax";"";"08/19/2004";"";"-24.99";"USD";"";""
    "";"";"Capital One Quicksilver";"";"Gas";""USA Petroleum";"";"09/13/2004";"";"-20.43";"USD";"";""
    

    原始的CVS文件中有一些不必要的字符,我删除了这些字符以获得如上所示的数据,使用以下代码:

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    import scipy as sp
    
    text = open("report.csv", "r")
    text = ''.join([i for i in text]) \
          .replace('old', 'new')
    x = open("report_mod.csv","w")
    x.writelines(text)
    
    x.close()
    

    我现在遇到的问题是,如何将字段列的所有条目的双引号(“”)替换为单引号(“) Payee ?

    在上面的示例中 收款人 ""Carfax" , “”Carfax“ ""USA Petroleum" 。我想用单引号替换开头的双引号,即。 "Carfax" , “Carfax” "USA Petroleum"

    新的CSV文件应该如下所示:

    "Name";"Current balance";"Account";"Transfers";"Description";"Payee";"Category";"Date";"Memo";"Amount";"Currency";"Check #";"Tags"
    "Capital One Quicksilver";"-119.99";"USD";"";"";"";"";";"";"";";"";""
    "";"";"Capital One Quicksilver";"";"DMV";"Carfax";"";"08/19/2004";"";"-24.99";"USD";"";""
    "";"";"Capital One Quicksilver";"";"DMV";"Carfax";"";"08/19/2004";"";"-24.99";"USD";"";""
    "";"";"Capital One Quicksilver";"";"Gas";"USA Petroleum";"";"09/13/2004";"";"-20.43";"USD";"";""
    

    示例数据文件: report.csv

    1 回复  |  直到 4 年前
        1
  •  2
  •   bb4hn    4 年前

    您也许可以使用regex

    import re
    text = re.sub('^""$', '"' ,text)
    

    所以完整的代码必须是这样的:

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    import scipy as sp
    import re
    
    # reading CSV file
    data = pd.read_csv("report.csv",delimiter=';')
    
    for val in data['Payee']:
        val = str (val)
        newVal = re.sub(r'"', '' ,val)
        newVal = '"'+newVal+'"'
        print(newVal)
    

    我的终端上的输出是这样的:

    "nan"
    "Carfax"
    "Carfax"
    "USA Petroleum"
    

    编辑:添加完整代码以创建文件

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    import scipy as sp
    import re
    
    # reading CSV file
    data = pd.read_csv("report.csv",delimiter=';')
    names           = data['Name'].tolist();
    balances        = data['Current balance'].tolist();
    accounts        = data['Account'].tolist();
    transfers       = data['Transfers'].tolist();
    descriptions    = data['Description'].tolist();
    categories      = data['Category'].tolist();
    dates           = data['Date'].tolist();
    memos           = data['Memo'].tolist();
    amount          = data['Amount'].tolist();
    currency        = data['Currency'].tolist();
    check           = data['Check #'].tolist();
    tags            = data['Tags'].tolist();
    
    counter = 0
    f = open("report_modified.csv", "w+")
    f.write('"Name";"Current balance";"Account";"Transfers";"Description";"Payee";"Category";"Date";"Memo";"Amount";"Currency";"Check #";"Tags"\n');
    for val in data['Payee']:
        val = str (val)
        newVal = re.sub(r'"', '' ,val)
        newVal = '"'+newVal+'"'
        print(newVal)
        f.write(str(names[counter])+';')
        f.write(str(balances[counter])+';')
        f.write(str(accounts[counter])+';')
        f.write(str(transfers[counter])+';')
        f.write(str(descriptions[counter])+';')
        f.write(str(newVal)+';')
        f.write(str(categories[counter])+';')
        f.write(str(dates[counter])+';')
        f.write(str(memos[counter])+';')
        f.write(str(amount[counter])+';')
        f.write(str(currency[counter])+';')
        f.write(str(check[counter])+';')
        f.write(str(tags[counter])+'\n')
    f.close()