簡體   English   中英

Python讀取文件替換單詞中的字符串

[英]Python read a file replace a string in a word

我正在嘗試讀取以下數據的文件

Et1, Arista2, Ethernet1
Et2, Arista2, Ethernet2
Ma1, Arista2, Management1

我需要閱讀文件Et替換為EthernetMa替換為Management 在它們的末尾,數字應相同。 實際輸出如下

Ethernet1, Arista2, Ethernet1
Ethernet2, Arista2, Ethernet2
Management1, Arista2, Management1

我試着用正則表達式的代碼,我能夠得到我可以分析所有的點Et1Et2Ma1 但是無法取代它們。

import re
with open('test.txt','r') as fin:
       for line in fin:
       data = re.findall(r'\A[A-Z][a-z]\Z\d[0-9]*', line)
       print(data)

輸出看起來像這樣。

['Et1'] 
['Et2'] 
['Ma1']
import re

#to avoid compile in each iteration
re_et = re.compile(r'^Et(\d+),')
re_ma = re.compile(r'^Ma(\d+),')

with open('test.txt') as fin:
    for line in fin:
        data = re_et.sub('Ethernet\g<1>,', line.strip())
        data = re_ma.sub('Management\g<1>,', data)
        print(data)

此示例遵循約瑟夫·法拉(Joseph Farah)的建議

    import csv
    file_name = 'data.csv'
    output_file_name = "corrected_data.csv"

    data = []
    with open(file_name, "rb") as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        for row in reader:
            data.append(row)

    corrected_data = []
    for row in data:
        tmp_row = []
        for col in row:
            if 'Et' in col and not "Ethernet" in col:
                col = col.replace("Et", "Ethernet")
            elif 'Ma' in col and not "Management" in col:
                col = col.replace("Ma", "Management")
            tmp_row.append(col)
        corrected_data.append(tmp_row)

    with open(output_file_name, "wb") as csvfile:
        writer = csv.writer(csvfile, delimiter=',')
        for row in corrected_data:
            writer.writerow(row)        

    print data

這是您應該采取的步驟:

  1. 讀取文件中的每一行
  2. 使用注釋作為分隔符,將每行分成較小的列表項
  3. 使用str.replace()將字符替換為所需的單詞; 請記住,凡是寫有“ Et”(包括“ ethernet”一詞的開頭)的內容都將被替換,因此請記住考慮這一點。 馬雲和管理層也是如此。
  4. 將其回滾到一個大列表中,然后使用file.write()將其重新放入文件中。 您可能必須覆蓋原始文件。

暫無
暫無

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

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