字符串操作

从文件里读取字符串踩过的坑。整理一些处理字符的细节,主要记录字符串拼接和分割时的需要注意的地方。

从txt文件里读取字符串常用函数readlines()或者readline与for结合迭代构成字符串

除去空格

data = ''
with open('test.txt', 'r',encoding='utf-8') as f:
  for line in f.readlines():
    line = line.strip()
    data += line

这里strip()删除字符串首尾的空格,除此之外还有lstrip()和rstrip()

# 删除字符串两边的空格
print(data.strip()) # Hello World

# 删除左边的空格
print(data.lstrip()) # Hello World (只删除左边的空格)

# 删除字符串右边的空格
print(data.rstrip()) #  Hello World(只删除右边的空格)

不过这些函数无法除去字符中间的空格,如果需要可以使用替代的方法

data.replace(' ', '')

读取文件时还会遇到空字符以及回车等字符,需要从数据中删除这些数据

除去回车

在python中存在继承了 回车符\r 和 换行符\n 两种标记。

\r\n 都是以前的那种打字机传承来的。

\r 代表回车,也就是打印头归位,回到某一行的开头。

\n代表换行,就是走纸,下一行。

linux只用\n换行。

win下用\r\n表示换行。

python中同样一句话:print (u'前面的内容\r只显示后面的内容')

所以,在去除换行时,需要同时去除两者才行

data.replace('\n', '').replace('\r', '')

除去列表中的空字符

在实际计算时空字符也会对结果产生影响

line = "f 1312/1425/1312 1/1/1 1310/1423/1310 1309/1422/1309 "
line.replace(" ",",").split(",")
['f', '1312/1425/1312', '1/1/1', '1310/1423/1310', '1309/1422/1309', '']

在最后的结果里存在这样的空字符参与运算,导致结果错误,可以从列表中除去空字符

list1 = ['122', '2333', '3444', '', '', None]
a = list(filter(None, list1))  # 只能过滤空字符和None
print(a)  
# ['122', '2333', '3444']

# Python内建filter()函数 - 过滤list
# filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
def not_empty(s):
    return s and s.strip()
 
list2 = ['122', '2333', '3444', ' ', '422', ' ', '    ', '54', ' ', '', None, '   ']
print(list(filter(not_empty, list2)))  
['122', '2333', '3444', '422', '54']
# 不仅可以过滤空字符和None而且可以过滤含有空格的字符