根据特定要求写入文件时的注意事项(f.write函数,split函数,strip函数)

在这里插入图片描述

查找行中是否具有’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等具体作用

参考文件读写的具体操作

为何用二进制方式读取文件,然后将变量的行进行字符串转换后,虽然所找元素前面有空格,但是不需要加空格就能找到这个元素?当然加空格也能找到这个元素。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值