簡體   English   中英

如何在csv文件中使用python替換字符串字符模式

[英]How to replace string character pattern using python in csv file

我是python的新手。 如何替換 .csv 文件中包含多行的字符串字符," to ,{ and ", to },

這是我的 .csv 文件內容

Name, Degree,Some, Occupation, Object
Mr. A,"B.A, M.A",123,"ags,gshs",ass
Mr. ABC,"B.A, M.A",231,"ags,gshs",asas
Mr. D,"BB.A, M.A",44,"ags,gshs",asas
Mr. G,"BBBB.A, M.A",12,"ags,gshs",asasasa
Mr. S,"B.A, MMM.A",10,"ags,gshs",asasas
Mr. R,"B.A, M.A",11,"ags,gshs",asasas
Mr. T,"B.A, M.A",12,"ags,gshs",asasa
Mr. DD,"B.A, M.A",13,"ags,gshs",asasas

所以我的輸出將是這樣的

 Name, Degree,Some, Occupation, Obejct
 Mr. A,{B.A, M.A},123,{ags,gshs},ass
 Mr. ABC,{B.A, M.A},231,{ags,gshs},asas
 Mr. D,{BB.A, M.A},44,{ags,gshs},asas
 Mr. G,{BBBB.A, M.A},12,{ags,gshs},asasasa
 Mr. S,{B.A, MMM.A},10,{ags,gshs},asasas
 Mr. R,{B.A, M.A},11,{ags,gshs},asasas
 Mr. T,{B.A, M.A},12,{ags,gshs},asasa
 Mr. DD,{B.A, M.A},13,{ags,gshs},asasas

使用file.read()打開文件后,可以使用replace(old, new)替換所需的字符串字符。 請記住,由於字符串,"",包含引號,因此必須在引號前加上\\ ,以表明它們是字符串的一部分。

編輯:評論中提到您可以將字符串括在' ' 如果這樣做,則不需要在引號前加上\\ 例如, ",\\""',"'都是有效的字符串。

data = ""

with open("/path/to/file.csv") as file:
     data = file.read().replace(",\"", ",{").replace("\",", "},")

with open("/path/to/new_file.csv") as file:
     file.write(data)

如果只需要一次,則可以使用像這樣的熊貓:

import pandas as pd

data1 = '''\
Name,Degree,Some,Occupation,Object
Mr. A,"B.A, M.A",123,"ags,gshs",ass
Mr. ABC,"B.A, M.A",231,"ags,gshs",asas
Mr. D,"BB.A, M.A",44,"ags,gshs",asas
Mr. G,"BBBB.A, M.A",12,"ags,gshs",asasasa
Mr. S,"B.A, MMM.A",10,"ags,gshs",asasas
Mr. R,"B.A, M.A",11,"ags,gshs",asasas
Mr. T,"B.A, M.A",12,"ags,gshs",asasa
Mr. DD,"B.A, M.A",13,"ags,gshs",asasas'''

df = pd.read_csv(pd.compat.StringIO(data1), sep=',', dtype=object)
#df = pd.read_csv('input.csv', sep=',', dtype=object)  # Use this row for real application

df['Degree'] = '{'+df['Degree']+'}'
df['Occupation'] = '{'+df['Occupation']+'}'

# Create custom output
out = '\n'.join([','.join(df.columns), '\n'.join(','.join(i) for i in df.values)])

with open('output.csv') as f:
    f.write(out)

您可以使用拆包:

import csv
with open('filename.csv') as f:
  data = filter(None, list(csv.reader(f)))
  with open('filename.csv', 'w') as f1:
    write = csv.writer(f1)
    write.writerows([data[0]]+[[a, '{'+b+'}', c, '{'+d+'}', e] for a, b, c, d, e in data[1:]])

輸出:

Name, Degree,Some, Occupation, Object
Mr. A,{B.A, M.A},123,{ags,gshs},ass
Mr. ABC,{B.A, M.A},231,{ags,gshs},asas
Mr. D,{BB.A, M.A},44,{ags,gshs},asas
Mr. G,{BBBB.A, M.A},12,{ags,gshs},asasasa
Mr. S,{B.A, MMM.A},10,{ags,gshs},asasas
Mr. R,{B.A, M.A},11,{ags,gshs},asasas
Mr. T,{B.A, M.A},12,{ags,gshs},asasa
Mr. DD,{B.A, M.A},13,{ags,gshs},asasas

嘗試:

def find_replace(csv_path, search_characters, replace_with):
    text = open(csv_path, "r")
    text = ''.join([i for i in text]).replace(
        search_characters, replace_with)
    x = open(csv_path, "w")
    x.writelines(text)
    x.close()


if __name__ == '__main__':
    csv_path = "path/to/csv/file.csv"
    search_characters = ',"'
    replace_with = ',{'

    find_replace(csv_path, search_characters, replace_with)

    search_characters = '",'
    replace_with = '},'

    find_replace(csv_path, search_characters, replace_with)

上面的代碼打開文件,向其中寫入一些數據,然后關閉它。

或者,如果您更喜歡list以及with語句,即使代碼中發生了不好的事情,它也會小心地調用給定對象的__exit__函數。

def find_replace(csv_path, search_characters, replace_with):
    s_one, s_two = search_characters
    r_one, r_two = replace_with
    with open(csv_path) as file:
        data = file.read().replace(s_one, r_one).replace(s_two, r_two)
    with open(csv_path, 'w') as file:
        file.write(data)

if __name__ == '__main__':
    csv_path = "path/to/csv/file.csv"
    
    search_characters = [',"', '",']
    replace_with = [',{', '},']

    find_replace(csv_path, search_characters, replace_with)

使用with語句的主要優點是它可以確保我們的文件關閉而無需注意嵌套塊的退出方式。

經過測試並在您的示例上運行良好。

在csv文件中使用python替換字符串字符模式

text = open("input.csv", "r")
text = ''.join([i for i in text]).replace("character to be replaced", "character to be replaced with")
x = open("output.csv","w")
x.writelines(text)
x.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM