用Python将文本文件中以逗号分隔的单词替换为特定列的单词
抱歉,我刚开始学习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
我需要把第二列的值替换成其他的,比如:
把第五列中的所有1替换成noissue,把0替换成issue,但只在第五列进行替换,因为我不想让第三列受到影响。
非常感谢!
3 个回答
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”周围可能多余的空格。
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)
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)