python能将文件转换为'1010'文本吗?,,最近迷上了玩python
python能将文件转换为'1010'文本吗?,,最近迷上了玩python
最近迷上了玩python challenge,就想写个能实现如题功能的玩意,无奈脑袋不够用。。。
另,希望能够以一个图片为例,再将字符串转回原来原来的图片。多谢!
(另,最好是python,不过java\c\c++都可以)
感谢 @xavierskip 的评论!
终于摸出来了。。收获良多。
用二进制形式打开文件后,read()出来的字符串叫做binary string,二进制字符串,指的是这串字符串二进制层面上和文件完全相同,把它写入到另一个二进制文件中就等于拷贝了一份。而不是指表现形式上的二进制(101010101)。
然后就是把这个字符串里的每个字符用ord()转换数字,再转成二进制表现形式的字符串就可以了。要注意的是python的bin()函数不会自己补足8位。
好奇一下。。。binary string(二进制字符串)是指和它代表的文件在二进制层面上内容相同的字符串,那1010这种字符串又怎么称呼呢?
stackoverflow上很多问题似乎都是用1s and 0s来表示。。。有没有再文艺清新点的表达方式?。。
巩固学习,写了相互转换的函数:
# path参数:要转换的文件的路径def convertFileToOneAndZero(path): f = open(path,'rb') src = f.read() print len(src) result = [] for i in src: temp = bin(ord(i))[2:] temp = '0' * (8-len(temp)) + temp result.append(temp) return ''.join(result)# src参数:1010字符串# path参数:输出文件的路径def convertOneAndZeroToFile(src, path): result = [] for i in range(0, len(src), 8): result.append(chr(int(src[i:i+8], 2))) f = open(path, 'wb') f.write(''.join(result)) f.close()
result = [] for i in src: temp = bin(ord(i))[2:] temp = '0' * (8-len(temp)) + temp result.append(temp) return ''.join(result)
这段可以一行搞定:
return ''.join([ '{0:08b}'.format(ord(i)) for i in src ])
string.format的例子可以看看 http://docs.python.org/2/library/stri...
字符串拼接的小技巧可以看 http://wiki.python.org/moin/PythonSpe...,这篇文档里面还有不少其它优化技巧
编橙之家文章,
相关内容
- Python开发Online Judge服务器后端有优势吗?,pythonjudge,服务
- python里面生产者和消费者关于线程疑问,python生产者
- 在Python中实现js的escape?,pythonescape,js:>>>escape
- Python Flask源码异常处理的问题,pythonflask,Flask versio
- 将mngodb返回对象类型变成字典类型怎么操作,mngodb字典
- 求微博站内应用Django'POST /friendscare/ HTTP/1.1'错误解决方
- Python re正则表达式匹配含有\字符串不成功,python正则表
- bottle服务中创建定时器执行任务 重复执行的问题,bo
- python模块import问题求解,python模块import,我用的是pytho
- Python threadpool模块多线程写文件有必要加锁吗,pythont
评论关闭