2016-04-21 74 views
0

我试图读取一个文件下面的数据Python的读取文件替换字符串一句话

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

我需要读取该文件与EthernetMaManagement取代Et。在他们的最后,这个数字应该是一样的。实际输出应该如下

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

回答

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. 使用str.replace()替换字符与你想要的话交流;请记住,任何说“Et”(包括“ethernet”这个词的开始)都将被替换,所以请记住说明这一点。马和管理同样如此。
  3. 将其重新放回一个大列表中,并将其放回到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