用Python替换特定列中用word分隔的文本文件逗号中的单词

时间:2014-06-08 11:54:11

标签: python text replace

很抱歉,我只是在说明Python,需要一些灯光

我有一个如下列表:

$ cat server.txt
column1, column2, column3, column4, column5
server1, windows, 120, running , 1
server2, linux, 250, offline , 1
server3, centos, 60, maintenance, 0
server4, windows, 123, running, 1
server5, linux, 145, offline, 0

我需要用其他值替换第二列,如:

第5列中的所有1都替换为 noissue ,而0替换为问题 但只有第5栏,因为我不想让第3列受到更改

的影响

非常感谢

3 个答案:

答案 0 :(得分:1)

如果您确定要替换的列仅包含0和1。

,这将有效
firstline = True
with open("server.txt") as f:
    with open("output.txt", "w") as fw:
        for line in f.readlines(): # For each line in server.txt

            if firstline: # Do not process the header line
                firstline = False
                continue

            if line[-2] == "1": # -2 because -1 is the line return character
                line = line[:-2] + "noissue\n"
            else:
                line = line[:-2] + "issue\n"
            fw.write(line)

答案 1 :(得分:0)

您可以执行类似

的操作
mapping = {'0':'issue', '1':'noissue'}
for line in sys.stdin:
  fields = line.split(',')
  if fields[4].strip() in mapping:
    fields[4] = mapping[fields[4].strip()]
  print ','.join(fields)

这将适用于标准输入并写入标准输出,因此您必须像

一样调用您的程序
$ python program.py < server.txt > output.txt

如果列中既没有“0”也没有“1”,则不会更改该值。如果您想更改其他值,也可以调整mapping

请注意,此程序不会单独处理第一行(请参阅julinenc的帖子以了解如何完成此操作)。由于您的第一行中没有“0”或“1”,因此它将与您发布的示例一起使用。

另请注意使用strip()方法,这样可以消除“0”和“1”周围可能的额外空格

答案 2 :(得分:0)

您应该使用csv模块:

import csv

with open('server.txt', 'r') as infile, open('server_modified.txt','w') as outfile:
   reader = csv.reader(infile, delimiter=',')  # ',' is the default, but this shows
                                               # you how to change it in the future
   writer = csv.writer(outfile, delimiter=',')
   writer.writerow(next(reader)) # This will write the first row (your header)
                                 # directly to the output file

   for row in reader:
      if row[-1] == '1':
         row[-1] = 'noissue'

      if row[-1] == '0':
         row[-1] = 'issue'

      writer.writerow(row)