首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python读取文件替换单词中的字符串

Python读取文件替换单词中的字符串
EN

Stack Overflow用户
提问于 2016-04-21 03:13:52
回答 3查看 89关注 0票数 0

我正在试图读取以下数据的文件

代码语言:javascript
复制
Et1, Arista2, Ethernet1
Et2, Arista2, Ethernet2
Ma1, Arista2, Management1

我需要读取文件,将Et替换为EthernetMa替换为Management。在它们的末尾,数字应该是相同的。实际输出如下

代码语言:javascript
复制
Ethernet1, Arista2, Ethernet1
Ethernet2, Arista2, Ethernet2
Management1, Arista2, Management1

我尝试了一个带有正则表达式的代码,我可以解析所有的Et1Et2Ma1。但无法取代它们。

代码语言:javascript
复制
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)

输出结果如下..

代码语言:javascript
复制
['Et1'] 
['Et2'] 
['Ma1']
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-21 03:30:45

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2016-04-21 03:34:28

这个例子遵循了Joseph的建议

代码语言:javascript
复制
    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
EN

Stack Overflow用户

发布于 2016-04-21 03:19:24

以下是您应该采取的步骤:

  1. 读取文件中的每一行
  2. 使用注释作为分隔符,将每行分隔成较小的列表项。
  3. 使用str.replace()将字符替换为您想要的单词;请记住,任何写着"Et“的内容(包括”以太网“一词的开头)都会被替换,所以请记住这一点。妈妈和管理层也是如此。
  4. 将其回滚到一个大列表中,并使用file.write()将其放回文件中。您可能必须覆盖原始文件。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36758933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档