很抱歉,我只是在说明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列受到更改
的影响非常感谢
答案 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)