从文件中读取行并丢弃“\ n”和“\ l”尾随字符

时间:2017-02-01 17:24:18

标签: python

如果我输入以下代码:

f = open('/etc/issue', 'r')
out = f.readline()
f.close()
print out

我明白了:

Ubuntu 14.04.5 LTS \n \l

>>>

如果我输入:

out = f.readline().strip()

我明白了:

Ubuntu 14.04.5 LTS \n \l
>>>

(没有换行)

但我怎么才能得到:

Ubuntu 14.04.5 LTS

没有“\ n \ l”?

什么是“\ l”?

3 个答案:

答案 0 :(得分:3)

\n\l不是特殊字符,它们是文件/etc/issue内容的一部分(请参阅the manpage for issue。它们具有特殊含义,您可以查看在the manpage for agetty\n表示"机器的名称"以及\l" TTY的名称"。

如果您想从Ubuntu中的默认/etc/issue文件中获取版本名称(请注意,可以编辑此文件以更改登录终端的外观),您可以执行以下操作:

out = f.readline().split('\\')[0].strip()

获取分发信息的更可靠方法是使用有点模糊的lsb_release模块(APT包lsb-release):

import lsb_release
release_name = lsb_release.get_distro_information()['DESCRIPTION']

答案 1 :(得分:1)

有很多方法。

将用空字符串替换它们:

out = f.readline()[:-6].strip()

或者摆脱最后几个字符:

var UserSchema = mongoose.Schema({
fullName: {
    type: String,
    trim: true
},
phone: {
    type: String,
    trim: true,
    required: true,
},
gender: {
    type: String,
    enum: ['male', 'female'],
},
age: {
    type: Number,
    required: true
},
favorites: []
});

答案 2 :(得分:0)

/etc/issue是prelogin消息(在登录提示之前打印的消息)。 (请参阅issuegetty的Ubuntu手册页,并且可能包含转义序列,例如双字符\n,以指示其他进程添加节点名称 current_tty_name (非换行)。这就是您看到\n\l的原因:它们不是单字符转义换行符和换行符。

要摆脱它们,你可以按照建议使用replace(),或者使用正则表达式做同样的事情,但要注意逃避反斜杠。请注意,man getty列出了十几个转义码。