python小技巧-str()的妙用

当我们对一个文件进行字符串操作时,往往会遇到下面的i情况:

'utf-8' codec can't decode byte 0xca

此时,我们便想用open(file, ‘rb’)来打开文件进行处理,便有了下面的代码:

with open(file, 'rb') as f:    # 打开文件
    str_new_old = f.read()       # 每次读一行
    for str_new in str_new_old.splitlines():
        str_new_str = str(str_new)
        print(str_new_str)

如果此文件中只有一行文字:

我是中国人

那么将输出:

b'我是中国人'

很显然,我们对字符串处理,不想看到b”。可以将str_new_str = str(str_new)改为str_new_str = str(str_new, ‘utf-8’) 便有了下面的代码。

try:
    str_new_str = str(str_new, 'utf-8') # 这样会去掉b'',后续对字符串处理时,就不需要考虑:标记(前导“b”、 引号等)
except UnicodeDecodeError:
    #print("这句无法转换!手动去掉b'' 。")
    str_new_str = str(str_new)
    str_new_str = str_new_str.split("b'")[1] # 先去掉前面的 b'
    str_new_str = str_new_str[:-1]  # 再去掉最后一个 '
print(str_new_str)

增加捕捉异常,是由于有的文件会提示UnicodeDecodeError的错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 90: invalid start byte

这样就好了吗?不,实际中,如果本来字符串中包含 ‘ 那么就不会是b’1234’5’ 了,而是b”1234’5″,所以代码还需要更改str_new_str = str_new_str.split(“b'”)[1],即改为:

# 改为判断语句 b' or b"
if "b'" in  str_new_str:
    str_new_str = str_new_str.split("b'")[1] # 先去掉前面的 b'
elif 'b"' in  str_new_str:
    str_new_str = str_new_str.split('b"')[1] # 先去掉前面的 b"

哈哈哈,这样是不是很麻烦,是不是直接去掉b’或者b”更好呢???

# 利用替换函数replace()
str_new_str = str_new_str.replace("b'", "")
str_new_str = str_new_str.replace('b"', "")
str_new_str = str_new_str[:-1]

# 注意 replace 不会改变原 string 的内容,所以本例中应该再赋值给自己,即str_new_str。

或者:

# 直接去掉前两个字节和最后一个字节
str_new_str = str_new_str[2:]  # 丢掉前两个字节,即 b' 或者 b"
str_new_str = str_new_str[:-1]  # 丢掉最后一个 ' 或者 "

风凉

时人不识凌云木,直待凌云始道高。

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐

暂无内容!