python——文件写读取遇到的小坑,以及import和from都引用不到库的离谱原因

test.txt内容如下

0uwre

执行open时候偷懒没赋给变量,直接执行的:

print(open("test.txt","r").read(1))
print(open("test.txt","r").read(1))

本来以为打印出来会是:

0
u

结果执行时候 输出了两遍第一个字符,光标并没有移动,输出如下

0
0

​后来又赋了变量试一下

v=open("text.txt","r")
print(v.read(1))
print(v.read(1))

结果可以正常执行输出

0
u

之后又尝试了一下readline不赋变量直接输出两次,会不会光标同样不后移

print(open("test.txt","r").readline())
print(open("test.txt","r").readline())

发现结果还是只输出相同结果。

结论:(纯胡扯还是赋给变量再调用吧…可能因为内存被指向固定变量的情况下才可以通过后续操作移动光标,同样对这个变量.close才可以释放这块内存

对了还有如果你写

c=open("xxx.txt","r").readline()
print(c)
print(c)

就会发现他也是只打印两次重复的第一行,我个人理解这里是因为c被赋的值就是第一遍执行的值,其为静态的,无论打印多少次都是一个纯纯的已经被获取过的值(没有灵魂的值

如果在v.close释放掉了这部分,之后再调用v相关的就会报
ValueError: I/O operation on closed file.
需要再重新给v赋值open函数再调用即可…如果有别的办法可以close之后直接调用被close变量的方法…劳驾好心人留言告诉我一哈…
————————————————————————————

import和from都引用不到第三方库的离谱原因
在项目里创建了一个urllib的文件寻思拿来爬点东西,结果死活import不到urllib,后来思考了一下应该是重名了…改了一下文件名就可以调用了。
总结:文件注意命名…别和packet重名


如果要进行处理过后的byte写入,需要两侧带[ ],因为在Python中,bytes()构造函数的行为取决于传递给它的参数类型。如果传递的是一个整数,则会创建具有该整数值重复多次的字节序列。

例如,如果使用bytes(5),它将创建一个包含5个零值字节的字节序列。这是因为bytes()中的整数参数用于指定字节序列的长度,而不是作为一个值。

所以,如果在加密部分使用bytes(encrypted_byte),它将创建一个非常大的字节序列,其中字节的值为0,并且序列长度等于encrypted_byte的整数值。这与预期的字节异或操作不同,因为它不是将单个字节值放入字节序列中,而是创建了一个特定长度的字节序列。

要正确地将单个字节值作为字节序列的内容,需要使用bytes([encrypted_byte]),这将创建一个包含单个字节值的字节序列,而不是将整数作为字节序列的长度。

例子如下

with open(input_file, 'rb'):
    for i in input_file():
        print(bytes([i.....]))

反面例子如下

with open(input_file, 'rb'):
    for i in input_file():
        print(bytes(i.....))

这将创建一个极大的文件,因为i部分处理过后如果是一个整数,传入bytes()中将会直接创建对应长度的byte序列,而并非我们所要的byte值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值