2016-04-21 3 views
0

Я пытаюсь прочитать файл с данными нижеPython прочитать файл заменить строку в слове

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

мне нужно прочитать файл заменить Et с Ethernet и Ma с Management. В конце их цифры должны быть одинаковыми. Фактический выход должен быть следующим

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

Я попытался код с регулярными выражениями, я в состоянии добраться до точки я могу разобрать все Et1, Et2 и Ma1. Но они не могут их заменить.

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'] 

ответ

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

Вот шаги, которые необходимо предпринять:

  1. Читайте каждую строку в файле
  2. Раздельные каждую строку в меньший список используя комментарии в качестве разделительных символов
  3. Используйте str.replace(), чтобы заменить char актеры со словами, которые вы хотите; имейте в виду, что все, что говорит «Et» (включая начало слова «ethernet»), будет заменено, поэтому не забудьте учесть это. То же самое касается Ма и Менеджмента.
  4. Верните его в один большой список и верните его в файл с помощью file.write(). Возможно, вам придется перезаписать исходный файл.
1

Этот пример следует предложение Джозеф Фарах в

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 
Смежные вопросы