我使用的是Python2.7.3,我正在编写一个脚本,打印任何用户定义文件的十六进制字节值。它可以正确地处理一个问题:每个值都被打印在一个新的行上。是否可以用空格而不是新行打印值?
例如,代替
61
62
我想要61 62
。
下面是我的代码(..txt
是一个包含文本'abcd'
的文件):
#!usr/bin/python
import os
import sys
import time
filename = raw_input("Enter directory of the file you want to convert: ")
f = open(filename, 'rb')
fldt = f.read()
lnfl = len(fldt)
print "Length of file is", lnfl, "bytes. "
orck = 0
while orck < lnfl:
bndt = hex(ord(fldt[orck]))
bndt = bndt[-2:]
orck = orck + 1
ent = chr(13) + chr(10)
entx = str(ent)
bndtx = str(bndt)
bndtx.replace(entx, ' ')
print bndtx
这几乎可以满足您的所有需求:
创建的data.txt如下:
我得到以下输出:
tl;dr--1。您使用的变量名很差。2。你的十六进制字符串切片不正确。三。您的代码永远不会替换任何换行符。你可能只是想忘记那个功能。您还不完全理解字符、其整数代码和表示整数的十六进制字符串之间的区别。它们都是不同的:两个是字符串,一个是整数,它们都不相等。四。对于某些文件,不应删除换行符。
==
1。你的变量名太可怕了。
如果你不想问任何人问题那就好了。但由于每个人都需要提问,所以需要使用任何人都能理解的描述性变量名。您的变量名只比这些稍好一点:
那个程序运行良好,但不可能理解。
2。函数的作用是:产生不同长度的字符串。
例如
对每个字符串取切片[-2:]可以得到:
看你怎么在第二个字母里找到了“x”?切片:
表示转到字符串的末尾并备份两个字符,然后获取字符串的其余部分。与其这样做,不如从开始处将切片从3个字符开始:
3。您的代码永远不会替换任何换行符。
假设您的文件具有以下两个连续字符:
现在读入第一个字符,“\r”,并将其转换为整数ord(“\r”),得到整数13。现在把它转换成一个字符串hex(13),它给你一个字符串
"0xd"
,然后切掉前两个字符:接下来,代码中的这一行:
尝试在字符串
"d"
中查找字符串"\r\n"
的每个匹配项并替换它。不会有任何替换,因为替换字符串是两个字符长,而字符串"d"
是一个字符长。替换也不适用于
"\r\n"
和"0d"
。但至少现在它有可能工作,因为两个字符串都有两个字符。让我们将这两个字符串缩减为一个共同的分母:ascii码。“\r”的ascii码是13,“\n”的ascii码是10。那么字符串"0d"
呢?字符"0"
的ascii代码是48,字符“d”的ascii代码是100。这些字符串没有一个共同的字符。即使这样也不行:这也不会:
底线是:将一个字符转换成一个整数,然后再转换成一个十六进制字符串,最终并不会得到原始字符——它们只是不同的字符串。所以如果你这样做:
…你不能指望“a”被一个空格代替。如果在此处检查输出:
可以看到“a”是一个包含一个字符的字符串,而
'0x61'
是一个包含4个字符的字符串:'0'
、'x'
、'6'
和'1'
,并且在一个字符串中永远找不到四个字符的字符串。4)删除换行符可能会损坏数据。
对于某些文件,不希望替换换行符。例如,如果您正在读取一个.jpg文件,该文件包含一堆表示图像中颜色的整数,而图像中的某些颜色恰好由数字13后跟数字10表示,那么您的代码将从输出中消除这些颜色。
但是,如果您编写的程序是只读的文本文件,则可以替换换行符。但是,不同的操作系统使用不同的线。您正在尝试替换Windows换行符(\r\n),这意味着您的程序无法处理由Mac或Linux计算机创建的文件,这些计算机使用换行符。有很多简单的方法可以解决这个问题,但也许你现在还不想为此担心。
我希望这一切不要太混乱。
首先
print
不是Python 2中的函数,而是一个语句。要禁止自动换行,请添加一个尾随的
,
(逗号)。现在将使用空格代替换行符。演示:
输出:
或者使用Python 3的^{} function :
正如您可以清楚地看到的,
print()
函数的功能要强大得多,因为我们可以将任何字符串指定为end
而不是固定空间。相关问题 更多 >
编程相关推荐