查找行中是否具有’earpa001’元素
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.split(',')
print(line[1])
# if line.count(' earpa001') > 0:
# print('T')
# fo.write(line)
# fo.write('\n')
# f1.close()
# fo.close()
vawelon001
earpa001
earpa001
vawelon001
earpa001
vawelon001
earpa001
vawelon001
vawelon001
earpa001
ibarranco001
但是使用cout()函数却没有查找到
- 没有打印的结果,说明第7行代码没有起作用(即没有找到’earpa001’元素),但是上面的代码执行结果显示确实是有这个元素。
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.split(',')
#print(line[1])
if line.count('earpa001') > 0:
print('T')
# fo.write(line)
# fo.write('\n')
# f1.close()
# fo.close()
- 于是打开sensor.txt,查看原始文件,发现earpa001前面有个空格。
筛选时加上空格
- 成功查找到所需元素。
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.split(',')
#print(line[1])
if line.count(' earpa001') > 0:
print('T')
# fo.write(line)
# fo.write('\n')
# f1.close()
# fo.close()
T
T
T
T
T
将符合条件的行写入文件(f.write第一次报错)
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.split(',')
#print(line[1])
if line.count(' earpa001') > 0:
print('T')
fo.write(line)
fo.write('\n')
f1.close()
fo.close()
TypeError: write() argument must be str, not list
将符合条件的行写入文件(f.write第二次次报错)
- 参数不符合要求。
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.split(',')
#print(line[1])
if line.count(' earpa001') > 0:
fo.write(line[0],line[1],line[2],line[3])
fo.write('\n')
f1.close()
fo.close()
TypeError: TextIOWrapper.write() takes exactly one argument (4 given)
成功写入文件的代码
f1 = open('sensor.txt','r',encoding='utf8')
lines = f1.readlines()
fo = open('earpa001.txt','w',encoding='utf8')
for line in lines:
line = line.strip().split(',') #因为只有字符串类型才能使用strip()函数,所以这里写成line.split(',').strip()会报错
#print(line[1])
if line.count(' earpa001') > 0: #if line[1] == (' earpa001'):这个代码也能实现同样的功能
fo.write('{},{},{},{}\n'.format(line[0],line[1],line[2],line[3]))
f1.close()
fo.close()
书上参考代码(写入特定文件)
fi=open("sensor.txt","rb")
fo=open("earpa001.txt","wt")
for line in fi:
ls=str(line,encoding="utf-8").strip(' \r\n').split(',')
if ls[1].count("earpa001")>0:
fo.write('{},{},{},{}'.format(ls[0],ls[1],ls[2],ls[3]))
fi.close()
fo.close()
寻找特定元素的代码
- -(1)即使使用二进制读取文件,打印出来的行还是没有变化,还是含有空格。
fi=open("sensor.txt","rb")
fo=open("earpa001.txt","wt")
for line in fi:
#line = line.strip()
print(line)
b'2016/5/31 0:05, vawelon001,1,1\r\n'
b'2016/5/31 0:20, earpa001,1,1\r\n'
b'2016/5/31 2:26, earpa001,1,6\r\n'
b'2016/5/31 2:31, vawelon001,1,6\r\n'
b'2016/5/31 3:12, earpa001,1,1\r\n'
-
- (2)直接使用strip()函数直接去掉字符串末尾的空格及换行符。注意和上一个代码执行结果进行对比。
fi=open("sensor.txt","rb")
fo=open("earpa001.txt","wt")
for line in fi:
line = line.strip()
print(line)
b'2016/5/31 0:05, vawelon001,1,1'
b'2016/5/31 0:20, earpa001,1,1'
b'2016/5/31 2:26, earpa001,1,6'
b'2016/5/31 2:31, vawelon001,1,6'
b'2016/5/31 3:12, earpa001,1,1'
b'2016/5/31 3:28, vawelon001,1,1'
-
- (3)但是使用二进制格式打开文件,并且将遍历的行(int类型)变为字符串格式后(虽然仍然有空格),再次使用count()函数(不需要加空格)也能找到所需的元素。
fi=open("sensor.txt","rb")
fo=open("earpa001.txt","wt")
for line in fi:
ls=str(line,encoding="utf-8").strip(' \r\n').split(',')
print(ls)
['2016/5/31 0:05', ' vawelon001', '1', '1']
['2016/5/31 0:20', ' earpa001', '1', '1']
['2016/5/31 2:26', ' earpa001', '1', '6']
['2016/5/31 2:31', ' vawelon001', '1', '6']
['2016/5/31 3:12', ' earpa001', '1', '1']
- 可以看到空格确实依旧存在。
- 但是下面的代码却可以找到所需元素。笔者也不知道为什么,希望有大佬可以在评论区解答我的疑惑。
#%%
fi=open("sensor.txt","rb")
fo=open("earpa001.txt","wt")
for line in fi:
ls=str(line,encoding="utf-8").strip(' \r\n').split(',')
if ls[1].count("earpa001")>0:
print(ls[1])
earpa001
earpa001
earpa001
earpa001
earpa001
count用法以及strip用法
- 列表和字符串以及元组都可以用count函数
list.count()
str.count()
tuple.count()
tup = 'a','b','c','a' #注意这看起来像是str,实际上是tuple类型
list = ['a','b','c','a']
str = 'abca'
print(tup.count('a'))
print(list.count('a'))
print(str.count('a'))
2
2
2
- 但是只有字符串类型才能使用strip()函数。
- str.strip(chars)表示从字符串str中去掉在其左侧和右侧chars中列出的字符。
str.strip()
文件读取rb,wt等具体作用
为何用二进制方式读取文件,然后将变量的行进行字符串转换后,虽然所找元素前面有空格,但是不需要加空格就能找到这个元素?当然加空格也能找到这个元素。